Partilhar via


Expressões em C++ gerenciadas

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

  • Identificadores e tipos

  • Avaliação da função

  • Operadores

  • Operadores sobrecarregados

  • Cadeias de caracteres

  • Projeções

  • Atribuição e comparação de objeto

  • Operadores typeof e sizeof

  • Boxing

  • Avaliação de propriedade

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

O avaliador da expressão executa todas as avaliações em um contexto seguro implícito, se o código sendo executado é seguro ou não seguro.

O depurador usa regras autoexpand para exibir o conteúdo de um tipo de dados no formulário significativo.Se você precisar, você pode adicionar elementos AutoExpandir personalizado para exibir seus próprios tipos de dados personalizados.Para obter mais informações, consulte Exibindo elementos de um tipo de dados personalizados.

Identificadores e tipos

Expressões de depurador podem usar qualquer identificador visível dentro do escopo atual.Se o depurador é interrompido na função magh, por exemplo, você pode usar qualquer identificador visível dentro do magh, incluindo constantes, nomes de variáveis e nomes de função.

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

Você pode atribuir um novo valor para qualquer expressão à esquerda hand lado que é um l-valor de um tipo primitivo.Atribuições para tipos de classe e de matriz não são suportadas.

Avaliação da função

O depurador oferece suporte a avaliação de funções, incluindo funções sobrecarregadas.Portanto, você pode inserir qualquer uma das expressões a seguir e o depurador chamará a versão correta da função sobrecarregada:

kanga ()
kanga (roo)

Na verdade, avaliar uma função no depurador chama e executa o código para essa função.Se a função possui efeitos colaterais, como alocar memória ou alterando o valor de uma variável global, avaliar a função em uma janela de depurador alterará o estado de seu programa, que pode produzir resultados inesperados.

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

Operadores

O depurador corretamente avalia os operadores mais internos, incluindo:

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

  • Operadores booleanos: (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 de deslocamento.Exemplos: (expr1 >>expr2, expr1 <<expr2, expr1 >>> expr2).

  • Assignment operators: ( 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.Examples: ( +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

Mais operadores sobrecarregados funcionam no depurador.

Sobrecarga nos operadores fixos +, -, /, %, e & trabalho:

  • expr1 + expr2

  • expr1expr2

  • expr1 / expr2

  • expr1 % expr2

  • expr1 & expr2

Sobrecarga nos operadores fixos =, & &, &, | |, |, e ^ não funcionam:

  • expr1 = expr2

  • expr1 & & expr2

  • expr1 & expr2

  • expr1 | | expr2

  • expr1 | expr2

  • expr1 ^ expr2

Sobrecarregado operadores relacionais = =,! =, >, <>, =, e < = não funcionam para C++:

  • expr1 = = expr2

  • expr1 ! = expr2

  • expr1 > expr2

  • expr1 < expr2

  • expr1 > = expr2

  • expr1 < = expr2

Sobrecarga nos operadores fixos |, ^, <>,, >, <>, =, e < = não funcionam:

  • expr1 | expr2

  • expr1 ^ expr2

  • expr1 << expr2

  • expr1 >> expr2

  • expr1 > expr2

  • expr1 < expr2

  • expr1 > = expr2

  • expr1 < = expr2

Sobrecarregado operadores de prefixo +, -, + +, -,!, e ~ funcionam:

  • +expr1

  • -expr1

  • ++expr1

  • --expr1

  • !expr1

  • ~expr1

Sobrecarregado operadores de sufixo + + e --funcionam:

  • expr1+ +

  • expr1-

O operador de sobrecarga [] funciona:

  • xexpr2

Matrizes multidimensionais

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

c[0,0]

Usando a sintaxe C++ normal gera um erro:

c[0][0]Erro: índice '0' fora do limite para ponteiro/matriz 'c'

Cadeias de caracteres

O depurador reconhecerá o operador indexado quando ele é usado com seqüências, bem como matrizes.Assim, por exemplo, você pode inserir:

"hello world"[0]

O Watch janela exibirá o valor correto:

'h'

Projeções

Expressões de conversão simples funcionam no depurador:

(A)x

Casts que envolvem ponteiros não funcionará no depurador:

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

Atribuição e comparação de objeto

Comparação de objeto e a atribuição no depurador não funciona para Visual C++.

Operadores typeof e sizeof

O depurador oferece suporte o operador typeof e sizeof transformando em equivalente.Função do NET Framework.

typeof ( expression)

é transformada em:

System.Type.GetType(expression )

O depurador depois avalia a expressão transformada.

O depurador não oferece suporte a sizeof operador.

Boxing e Unboxing

O avaliador da expressão do depurador não suporta boxing e unboxing em Visual C++.Para obter mais informações, consulte Boxing e Unboxing.Se você tiver uma variável integer i que foi convertido em um objeto através de boxing, o depurador irá avaliar i como um inteiro, não como um objeto.Os resultados podem não ser a esperada.

Avaliação de propriedade

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

WebMethods

Você não é possível chamar WebMethods do depurador windows.

Consulte também

Outros recursos

Expressões no depurador