Sintaxe de símbolo e correspondência de símbolos

Os símbolos permitem manipular diretamente tokens usados pelo programa que está sendo depurado. Por exemplo, você pode definir um ponto de interrupção na função main com o comando bp main ou exibir a variável de inteiro MyInt com o comando dd MyInt L1.

Em muitos casos, os símbolos podem ser usados como parâmetros em comandos de depurador. Isso tem suporte para a maioria dos parâmetros numéricos e também tem suporte em alguns parâmetros de texto. Além das regras gerais para sintaxe de símbolo, também há regras de sintaxe de símbolo que se aplicam a cada um desses casos.

Regras gerais de sintaxe de símbolo

Um nome de símbolo consiste em um ou mais caracteres, mas sempre começa com uma letra, sublinhado (_), ponto de interrogação (?) ou sinal de dólar ($).

Um nome de símbolo pode ser qualificado por um nome de módulo. Um ponto de exclamação (!) separa o nome do módulo do símbolo (por exemplo, mymodule!main). Se nenhum nome de módulo for usado, o símbolo ainda poderá ser prefixado com um ponto de exclamação. Usar um ponto de exclamação sem nome de módulo pode ser especialmente útil, mesmo para variáveis locais, para indicar a um comando de depurador que um parâmetro é um nome e não um número hexadecimal. Por exemplo, a variável fade será lida pelo comando dt (Tipo de Exibição) como um endereço, a menos que seja prefixado por um ponto de exclamação ou a opção -n seja usada. No entanto, para especificar que um símbolo é local, preceda-o com um sinal de dólar ( $ ) e um ponto de exclamação ( ! ), como em $!lime.

Os nomes de símbolos não diferenciam maiúsculas de minúsculas. Isso significa que a presença de um myInt e um MyInt em seu programa não será corretamente compreendida pelos depuradores; qualquer comando que faça referência a um desses pode acessar o outro, independentemente de como o comando é maiúsculo.

Sintaxe de símbolo em expressões numéricas

O depurador entende dois tipos diferentes de expressões: expressões MASM (Microsoft Macro Assembler) e expressões C++. No que diz respeito aos símbolos, essas duas formas de sintaxe diferem da seguinte maneira:

  • Em expressões MASM, cada símbolo é interpretado como um endereço. Dependendo do que o símbolo se refere, esse será 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) resultará em um erro de sintaxe.

Para obter uma explicação de quando e como usar cada tipo de sintaxe, consulte Avaliando expressões.

Se você estiver usando a sintaxe de expressão MASM, qualquer símbolo que possa ser interpretado como um número hexadecimal ou como um registro (por exemplo, BadFeed, ebX) sempre deverá ser prefixado por um ponto de exclamação. Isso garante que o depurador o reconheça como um símbolo.

O comando ss (Definir sufixo de símbolo) pode ser usado para definir o sufixo de símbolo. Isso instrui o depurador a acrescentar automaticamente "A" ou "W" a qualquer nome de símbolo que não encontrar de outra forma.

Muitas rotinas win32 existem nas versões ASCII e Unicode. Essas rotinas geralmente têm um "A" ou "W" acrescentado ao final de seus nomes, respectivamente. O uso de um sufixo de símbolo ajudará o depurador ao pesquisar esses símbolos.

A correspondência de sufixo não está ativa por padrão.

Sintaxe de símbolo em expressões de texto

Os símbolos podem ser usados nos parâmetros de texto de alguns comandos , por exemplo, bm (Definir Ponto de Interrupção) e x (Examinar Símbolos).

Esses parâmetros de texto dão suporte a uma variedade de caracteres curinga e especificadores. Consulte Sintaxe curinga de cadeia de caracteres para obter detalhes. Além dos curingas de cadeia de caracteres padrão, uma expressão de texto usada para especificar um símbolo pode ser prefixada com um sublinhado à esquerda. Ao corresponder isso a um símbolo, o depurador tratará isso como qualquer quantidade de sublinhados, até mesmo zero.

O sufixo de símbolo não é usado ao corresponder símbolos em expressões de texto.