シンボルを使用すると、デバッグ中のプログラムによって使用されるトークンを直接操作できます。 たとえば、コマンド bp main を使用して関数 main にブレークポイントを設定したり、コマンド dd MyInt L1 で整数変数 MyInt を表示したりできます。
多くの場合、シンボルはデバッガー コマンドのパラメーターとして使用できます。 これはほとんどの数値パラメーターでサポートされており、一部のテキスト パラメーターでもサポートされています。 シンボル構文の一般的な規則に加えて、これらの各ケースに適用されるシンボル構文規則もあります。
シンボル構文の一般的な規則
シンボル名は 1 つ以上の文字で構成されますが、常に文字、アンダースコア (_)、疑問符 (?)、ドル記号 ($) で始まります。
シンボル名は、モジュール名で修飾できます。 感嘆符 (!) は、モジュール名とシンボル (例: mymodule!main) を区切ります。 モジュール名が使用されていない場合でも、シンボルの前に感嘆符を付けることができます。 モジュール名のない感嘆符を使用すると、ローカル変数の場合でも、パラメーターが 16 進数ではなく名前であることをデバッガー コマンドに示すために特に便利です。 たとえば、変数 フェード はアドレスとして dt (Display Type) コマンドによって読み取られます。ただし、前に感嘆符が付いている場合や、-n オプションが使用されている場合を除きます。 ただし、シンボルがローカルであることを指定するには、$ !lime のように、その前にドル記号 ( $ ) と感嘆符 ( ! ) を付けます。
シンボル名では、大文字と小文字は完全に区別されません。 つまり、プログラム内の myInt と MyInt がデバッガーによって正しく認識されません。これらのいずれかを参照するコマンドは、コマンドの大文字化方法に関係なく、他のコマンドにアクセスできます。
数値式のシンボル構文
デバッガーは、Microsoft マクロ アセンブラー (MASM) 式と C++ 式の 2 種類の式を理解します。 シンボルに関する限り、これら 2 つの形式の構文は次のように異なります。
MASM 式では、各シンボルはアドレスとして解釈されます。 シンボルの参照内容に応じて、グローバル変数、ローカル変数、関数、セグメント、モジュール、またはその他の認識されたラベルのアドレスになります。
C++ 式では、各シンボルはその型に従って解釈されます。 シンボルが何を参照しているかに応じて、整数、データ構造、関数ポインター、またはその他のデータ型として解釈される場合があります。 C++ データ型 (変更されていないモジュール名など) に対応しないシンボルは、構文エラーになります。
各種類の構文を使用するタイミングと方法については、「 式の評価」を参照してください。
MASM 式の構文を使用している場合、16 進数またはレジスタとして解釈できるシンボル ( BadFeed、 ebX など) には、常に感嘆符のプレフィックスを付ける必要があります。 これにより、デバッガーでシンボルとして認識されます。
ss (シンボル サフィックスの設定) コマンドを使用して、シンボル サフィックスを設定できます。 これにより、見つからないシンボル名に "A" または "W" が自動的に追加されるようにデバッガーに指示されます。
多くの Win32 ルーチンは、ASCII バージョンと Unicode バージョンの両方に存在します。 多くの場合、これらのルーチンの名前の末尾に "A" または "W" が追加されます。 シンボル サフィックスを使用すると、これらのシンボルを検索するときにデバッガーが役立つようになります。
サフィックスの照合は、既定ではアクティブではありません。
テキスト式のシンボル構文
シンボルは、 bm (ブレークポイントの設定) や x (シンボルの検査) など、一部のコマンドのテキスト パラメーターで使用できます。
これらのテキスト パラメーターは、さまざまなワイルドカードと指定子をサポートします。 詳細については、「 文字列ワイルドカード構文 」を参照してください。 標準の文字列ワイルドカードに加えて、記号を指定するために使用されるテキスト式には先頭にアンダースコアを付けることができます。 これをシンボルと照合すると、デバッガーはこれを任意の数のアンダースコア (ゼロでも) として扱います。
シンボル サフィックスは、テキスト式でシンボルを照合する場合には使用されません。