Expressões em C++ gerenciadas
This topic applies to:
Edition |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
|||||
Pro, Premium e Ultimate |
O avaliador da expressão gerenciado aceita a maioria das expressões escritas 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:
Identifiers and Types
Function Evaluation
Operators
Overloaded Operators
Strings
Casts
Atribuição e comparação de objeto
typeof and sizeof Operators
Boxing
Property Evaluation
O avaliador da expressão ignora os qualificadores de acesso, public, protected, internal, e private. Você pode chamar um private método a partir do Watch janela, por exemplo.
The expression evaluator performs all evaluations in an implicit unsafe context, whether the code being executed is safe or unsafe.
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 personalizados autoexpand para exibir seus próprios tipos de dados personalizados. For more information, see Displaying Elements of a Custom Data Type.
Identifiers and Types
Debugger expressions can use any identifier visible within the current scope. Se o depurador é interrompido na função magh, por exemplo, você pode usar qualquer identificador visível dentro de 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 o 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-value de um tipo primitivo. Atribuições de classe e a matriz de tipos não são suportadas.
Function Evaluation
The debugger supports the evaluation of functions, including overloaded functions. Therefore, you can enter either of the following expressions, and the debugger will call the correct version of the overloaded function:
kanga ()
kanga (roo)
Na verdade, avaliar uma função no depurador chama e executa o código para essa função. If the function has side effects, such as allocating memory or changing the value of a global variable, evaluating the function in a debugger window will change the state of your program, which can produce unexpected results.
When you set a breakpoint on an overloaded function, the location of the breakpoint depends on how you specify the function. If you specify only the function name, the debugger will set one breakpoint on each overload of that function name. Se você especificar a assinatura concluída, o nome da função e a lista de argumentos completa, o depurador define um ponto de interrupção na sobrecarga especificada.
Operators
The debugger correctly evaluates most built-in operators, including:
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).
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.
Overloaded Operators
Most overloaded operators work in the debugger.
Sobrecarga nos operadores fixos +, -, /, %, e & trabalho:
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
Sobrecarga nos 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
Overloaded prefix operators +, -, ++, --, !, and ~ work:
+ expr1
- expr1
++ expr1
-- expr1
!expr1
~ expr1
Overloaded suffix operators ++ and -- work:
expr1+ +
expr1–
A sobrecarga de operador [] funciona:
- xexpr2
Matrizes multidimensionais
O avaliador de expressão C++ usa C#-sintaxe de matrizes multidimensionais de estilo. For example:
c[0,0]
Usando a sintaxe do C++ normal gera um erro:
c[0][0]Erro: índice '0' fora do limite de ponteiro/array 'c'
Strings
The debugger recognizes the indexed operator when it is used with strings as well as arrays. So, for example, you can enter:
"hello world"[0]
The Watch window will display the correct value:
'h'
Casts
Simple cast expressions work in the debugger:
(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++.
typeof and sizeof Operators
The debugger supports the typeof and sizeof operator by transforming it into the equivalent .NET Framework function.
typeof ( expressão )
is transformed into:
System.Type.GetType(expression )
The debugger then evaluates this transformed expression.
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 por meio de boxing, o depurador irá avaliar i como um inteiro, não como um objeto. Os resultados não podem ser esperada.
Property Evaluation
The debugger can evaluate properties in any variable window. However, evaluating a property in the debugger can have side effects that produce unexpected and undesired results. To protect against side effects caused by accidental evaluation, you can turn property evaluation off in the Options dialog box.
WebMethods
You cannot call WebMethods from debugger windows.