Compartilhar via


Expressões gerenciadas em C++

O avaliador de expressão gerenciado aceita a maioria das expressões gravadas em Visual C++. Os tópicos a seguir oferecem informações específicas e discutem alguns dos tipos de expressão que não têm suporte:

  • Identificadores e tipos

  • Avaliação da função

  • Operadores

  • Operadores sobrecarregados

  • Cadeias de caracteres

  • Conversões

  • Comparação e atribuição de objeto

  • Operadores typeof e sizeof

  • Boxing

  • Avaliação de propriedade

O avaliador de expressão ignora qualificadores de acesso, public, protected, internal e private. Você pode chamar um método private da janela Inspeção, por exemplo.

O avaliador de expressão executa todas as avaliações em um contexto implícito não seguro, seja o código que está sendo executado seguro ou não.

O depurador usa regras autoexpandir para exibir os conteúdos de um tipo de dado em formato significativo. Se for necessário, você pode adicionar elementos personalizados autoexpandir para exibir seus próprios tipos de dados personalizados. Para obter mais informações, consulte Exibir elementos de tipos de dados personalizados.

Identificadores e tipos

As expressões do depurador podem usar qualquer identificador visível no escopo atual. Se o depurador for interrompido na função magh, por exemplo, você poderá usar qualquer identificador visível dentro de magh, incluindo constantes, nomes de variável e nomes de função.

O depurador pode exibir corretamente qualquer variável de tipo primitive, enum ou intrinsic. Para variáveis do tipo class, o depurador exibe corretamente o valor com base no tipo mais derivado. Se você tiver um objeto leo do tipo lion, derivado do tipo cat, você poderá avaliar leo.clawlength e obter o valor correto para um objeto de tipo lion.

Você pode atribuir um novo valor a qualquer expressão à esquerda que seja um valor l de um tipo primitivo. As atribuições aos tipos de classe e de matriz não têm suporte.

Avaliação da função

O depurador oferece suporte à avaliação das funções, incluindo funções sobrecarregadas. Em virtude disso, você pode digitar qualquer uma das seguintes expressões e o depurador chamará a versão correta da função sobrecarregada:

kanga ()
kanga (roo)

Avaliar uma função no depurador realmente chama e executa o código da função. Se a função tiver efeitos colaterais, como a alocação de memória ou alteração do valor de uma variável global, avaliar a função em uma janela do depurador modificará o estado do programa, o que poderá produzir resultados inesperados.

Quando você define um ponto de interrupção em uma função sobrecarregada, o local do ponto de interrupção depende de como você especifica a função. Se você especificar apenas o nome da função, o depurador definirá um ponto de interrupção em cada sobrecarga desse nome de função. Se você especificar a assinatura completa, o nome da função e a lista de argumentos completa, o depurador definirá um ponto de interrupção na sobrecarga especificada.

Operadores

O depurador avalia corretamente a maioria dos operadores internos, incluindo:

  • Operadores relacionais: (expr1 >expr2, expr1 < expr2, expr1 <= expr2, expr1 => expr2, expr1 == expr2, expr1 != expr2).

  • Operadores boolianos: (expr1 && expr2, expr1 || expr2).

  • Operador condicional: (expr1 ? expr2 : expr3) .

  • Operadores aritméticos: ( expr1 + expr2, expr1 - expr2,expr1 * expr2, expr1 / expr2, expr1 % expr2).

  • Operadores bit a bit: (expr1 & expr2, expr1 ^ expr2, expr1 | expr2, expr1 ~ expr2).

  • Operadores shift Exemplos: (expr1 >>expr2, expr1 <<expr2, expr1 >>> expr2).

  • Operadores de atribuição: ( lvalue = expr2, lvalue *= expr2, lvalue /= expr2, lvalue %= expr2, lvalue += expr2, lvalue -= expr2, lvalue <<= expr2, lvalue >>=expr2, lvalue &= expr2, lvalue ^= expr2, lvalue |= expr2 ).

  • Operadores unários. Exemplos: ( +expr1, - expr1, expr1++, ++expr1, expr1--, --expr1 ).

Você pode usar o operador vírgula para inserir uma série de expressões: expr1, expr2,expr3.

Operadores sobrecarregados

A maioria dos operadores sobrecarregados trabalham no depurador.

Operadores infixos sobrecarregados +, -, /, %, e & funcionam:

  • expr1 + expr2

  • expr1 expr2

  • expr1 / expr2

  • expr1 % expr2

  • expr1 & expr2

Operadores infixos sobrecarregados =, &&, &, ||, | e ^ não funcionam:

  • expr1 = expr2

  • expr1 && expr2

  • expr1 & expr2

  • expr1 || expr2

  • expr1 | expr2

  • expr1 ^ expr2

Operadores relacionais sobrecarregados ==, !=, >, <, >=, e <= não funcionam em C++:

  • expr1 == expr2

  • expr1 != expr2

  • expr1 > expr2

  • expr1 < expr2

  • expr1 >= expr2

  • expr1 <= expr2

Operadores infixos sobrecarregados |, ^, <<, >>, >, <, >=, e <= não funcionam:

  • expr1 | expr2

  • expr1 ^ expr2

  • expr1 << expr2

  • expr1 >> expr2

  • expr1 > expr2

  • expr1 < expr2

  • expr1 >= expr2

  • expr1 <= expr2

Operadores pré-fixos sobrecarregados +, -, ++, --, !, e ~ funcionam:

  • +expr1

  • -expr1

  • ++expr1

  • --expr1

  • !expr1

  • ~expr1

Operadores sufixos sobrecarregados ++ e -- funcionam:

  • expr1++

  • expr1--

O operador de sobrecarga [] funciona:

  • x[expr2]

Matrizes multidimensionais

O avaliador de expressão C++ usa a sintaxe de estilo C# para matrizes multidimensionais. Por exemplo:

c[0,0]

Usar a sintaxe normal C++ gera um erro:

c[0][0] erro: índices '0' fora do limite para o ponteiro/matriz 'c'

Cadeias de caracteres

O depurador reconhece o operador indexado quando é usado com cadeias de caracteres bem como matrizes. Por exemplo, você pode inserir:

"hello world"[0]

A janela Inspeção exibirá o valor correto:

'h'

Conversões

Trabalho de expressões de conversão simples no depurador:

(A)x

Conversões que envolvem ponteiros não funcionarão no depurador:

As conversões definidas pelo usuário não funcionam no depurador para Visual C++.

Comparação e atribuição de objeto

A comparação e a atribuição do objeto no depurador não funciona para Visual C++.

Operadores typeof e sizeof

O depurador oferece suporte aos operadores typeof e sizeof transformando-os nas funções .NET Framework equivalentes.

typeof ( expression )

é transformado em:

System.Type.GetType(expression )

O depurador avalia essa expressão transformada.

O depurador não oferece suporte ao operador sizeof.

Conversão boxing e unboxing

O avaliador de expressão do depurador não oferece suporte ao boxing e ao unboxing em Visual C++. Para obter mais informações, consulte Boxing e unboxing. Se você tiver uma variável de inteiro i que seja convertida em um objeto com o boxing, o depurador avaliará i como um inteiro, não como um objeto. Os resultados não podem ser o que você espera.

Avaliação de propriedade

O depurador pode avaliar propriedades em qualquer janela variável. No entanto, avaliar uma propriedade no depurador pode ter efeitos colaterais que geram resultados inesperados e indesejados. Para proteger contra efeitos colaterais causados pela avaliação acidental, você pode desativar a avaliação da propriedade da caixa de diálogo Opções.

WebMethods

Você não pode chamar WebMethods das janelas do depurador.

Consulte também

Outros recursos

Expressões no depurador