Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O depurador compreende duas formas diferentes de expressões: expressões MASM e expressões C++.
As expressões do Microsoft Macro Assembler (MASM) são usadas nos exemplos desta documentação da Ajuda, exceto quando indicado de outra forma. Nas 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:
Utilize a variável de ambiente _NT_EXPR_EVAL antes de iniciar o depurador.
Use a opção de linha de comando-ee {masm|c++} quando o depurador for iniciado.
Use o comando .expr (Choose Expression Evaluator) para exibir ou alterar o avaliador de expressão depois que o depurador estiver em execução.
Se você não usar um dos métodos anteriores, o depurador usará o avaliador de expressão MASM.
Se quiser avaliar uma expressão sem alterar o estado do depurador, você pode usar o ? (Avaliar Expressão) comando.
Todos os comandos e janelas de informações de depuração interpretam seus argumentos através do avaliador de expressão padrão, com as seguintes exceções:
O ?? (Avaliar expressão C++) sempre usa o avaliador de expressão C++.
A janela Watch 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 usado neste caso.
Os dois sinais (@@) permitem o uso de dois avaliadores diferentes para diferentes parâmetros de um único comando. Ele também permite que você avalie diferentes partes de uma expressão longa por diferentes métodos. Você pode aninhar os dois em sinais. Cada aparência dos dois sinais muda para o outro avaliador de expressão.
Advertência A sintaxe da 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, você deve definir a sintaxe de expressão MASM como o avaliador de expressão padrão. Caso precise de um parâmetro específico utilizando a sintaxe de expressão C++, utilize dois sinais de arroba (@@).
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 (set Number Base) pode ser usado para definir o radix padrão como 16, 10 ou 8. Todos os números não prefixados serão interpretados nesta base. O radix padrão pode ser substituído especificando o prefixo 0x (hexadecimal), o prefixo 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 número inteiro octal, adicione 0 (zero) antes do número. (No entanto, na saída do depurador, o prefixo decimal 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 os símbolos de forma diferente:
Nas 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 pode 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ímbolos 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 Números e operadores 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 regras de tipo C++ (incluindo o dimensionamento da aritmética de ponteiro).
Para obter alguns exemplos das diferentes sintaxes, consulte Exemplos de expressões mistas.