Compartilhar via


Avaliando expressões

O depurador entende duas formas diferentes de expressões: expressões MASM e expressões C++.

As expressões MASM (Microsoft Macro Assembler) são usadas nos exemplos desta documentação da Ajuda, exceto quando indicado de outra forma. Em expressões MASM, todos os símbolos são tratados como endereços.

As expressões C++ são as mesmas usadas no código C++ real. Nessas expressões, os símbolos são entendidos como os tipos de dados apropriados.

Quando cada sintaxe é usada

Você pode selecionar o avaliador de expressão padrão de uma das seguintes maneiras:

Se você não usar um dos métodos anteriores, o depurador usará o avaliador de expressão MASM.

Se você quiser avaliar uma expressão sem alterar o estado do depurador, poderá usar o ? (Avaliar expressão) Comando.

Todos os comandos e janelas de informações de depuração interpretam seus argumentos por meio do avaliador de expressão padrão, com as seguintes exceções:

  • O ?? (Avaliar expressão C++) O comando sempre usa o avaliador de expressão C++.

  • A janela Inspeção sempre usa o avaliador de expressão C++.

  • A janela Locais sempre usa o avaliador de expressão C++.

  • Alguns comandos de extensão sempre usam o avaliador de expressão MASM (e outros comandos de extensão aceitam apenas argumentos numéricos em vez de expressões completas).

  • Se qualquer parte de uma expressão estiver entre parênteses e você inserir dois sinais (@@) antes da expressão, a expressão será avaliada pelo avaliador de expressão que normalmente não seria usada nesse caso.

Os dois em sinais (@@) permitem que você use dois avaliadores diferentes para parâmetros diferentes de um único comando. Ele também permite que você avalie diferentes partes de uma expressão longa por métodos diferentes. Você pode aninhar os dois em sinais. Cada aparência dos dois em sinais alterna para o outro avaliador de expressão.

Aviso A sintaxe de expressão C++ é útil para manipular estruturas e variáveis, mas não é adequada como um analisador para os parâmetros dos comandos do depurador. Quando você estiver usando comandos de depurador para fins gerais ou estiver usando extensões de depurador, defina a sintaxe de expressão MASM como o avaliador de expressão padrão. Se você precisar ter um parâmetro específico usando a sintaxe de expressão C++, use a sintaxe two at sign (@@).

Para obter mais informações sobre os dois tipos de expressão diferentes, consulte Sintaxe de expressão numérica.

Números em expressões

Os números em expressões MASM são interpretados de acordo com o radix atual. O comando n (Definir Base numérica) pode ser usado para definir o radix padrão como 16, 10 ou 8. Todos os números não prefixados serão interpretados nessa base. O radix padrão pode ser substituído especificando o prefixo 0x (hexadecimal), o prefixo de 0n (decimal), o prefixo 0t (octal) ou o prefixo 0y (binário).

Os números em expressões C++ são interpretados como números decimais, a menos que você especifique de forma diferente. Para especificar um inteiro hexadecimal, adicione 0x antes do número. Para especificar um inteiro octal, adicione 0 (zero) antes do número. (No entanto, na saída do depurador, o prefixo decimal de 0n às vezes é usado.)

Se você quiser exibir um número em várias bases ao mesmo tempo, use o comando .formats (Mostrar Formatos de Número).

Símbolos em expressões

Os dois tipos de expressões interpretam símbolos de forma diferente:

  • Em expressões MASM, cada símbolo é interpretado como um endereço. Dependendo do que o símbolo se refere, esse endereço é o endereço de uma variável global, variável local, função, segmento, módulo ou qualquer outro rótulo reconhecido.

  • Em expressões C++, cada símbolo é interpretado de acordo com seu tipo. Dependendo do que o símbolo se refere, ele pode ser interpretado como um inteiro, uma estrutura de dados, um ponteiro de função ou qualquer outro tipo de dados. Um símbolo que não corresponde a um tipo de dados C++ (como um nome de módulo não modificado) cria um erro de sintaxe.

Se um símbolo puder ser ambíguo, preceda-o com o nome do módulo e um ponto de exclamação ( ! ). Se o nome do símbolo puder ser interpretado como um número hexadecimal, preceda-o com o nome do módulo e um ponto de exclamação ( ! ) ou apenas um ponto de exclamação. Para especificar que um símbolo deve ser local, omita o nome do módulo e inclua um cifrão e um ponto de exclamação ( $! ) antes do nome do símbolo. Para obter mais informações sobre como interpretar símbolos, consulte Sintaxe de símbolo e correspondência de símbolos.

Operadores em expressões

Cada tipo de expressão usa uma coleção diferente de operadores.

Para obter mais informações sobre os operadores que você pode usar em expressões MASM e suas regras de precedência, consulte Operadores e números MASM.

Para obter mais informações sobre os operadores que você pode usar em expressões C++ e suas regras de precedência, consulte Números e operadores C++.

Lembre-se de que as operações MASM são sempre baseadas em bytes e as operações C++ seguem as regras de tipo C++ (incluindo o dimensionamento da aritmética do ponteiro).

Para obter alguns exemplos das diferentes sintaxes, consulte Exemplos de expressões mistas.