Partilhar via


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

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

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

Regras gerais de sintaxe de símbolos

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

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 do 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 (Display Type) como um endereço, a menos que seja prefixada 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 cifrão ( $ ) e um ponto de exclamação ( ! ), como em $!lime.

Os nomes dos símbolos são completamente insensíveis a maiúsculas e minúsculas. Isto significa que a presença de um myInt e um MyInt no seu programa não será corretamente compreendida pelos depuradores; Qualquer comando que faça referência a um deles pode acessar o outro, independentemente de como o comando está em maiúsculas.

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

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

  • Nas expressões MASM, cada símbolo é interpretado como um endereço. Dependendo do que o símbolo se refere, este 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) deve sempre ser prefixado por um ponto de exclamação. Isso garante que o depurador o reconheça como um símbolo.

O comando ss (set Symbol Suffix) 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 possa encontrar de outra forma.

Muitas rotinas Win32 existem em ambas as versões ASCII e Unicode. Essas rotinas geralmente têm um "A" ou "W" anexado ao final de seus nomes, respectivamente. Usar um sufixo de símbolo ajudará o depurador ao procurar esses símbolos.

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

Sintaxe do símbolo em expressões de texto

Os símbolos podem ser usados nos parâmetros de texto de alguns comandos -- por exemplo, bm (set Breakpoint) e x (Examine Symbols).

Esses parâmetros de texto suportam uma variedade de caracteres universais e especificadores. Consulte Sintaxe curinga de cadeia de caracteres para obter detalhes. Além dos caracteres curinga padrão, uma expressão de texto usada para especificar um símbolo pode ser prefixada com um underscore. Ao comparar isto com um símbolo, o depurador irá considerar isto como qualquer quantidade de sublinhados, inclusive zero.

O sufixo de símbolo não é usado ao fazer a correspondência de símbolos em expressões de texto.