式の評価

デバッガーは、MASM 式C++ 式という 2 つの異なる形式の式を理解します。

このヘルプ ドキュメントの例では、特に断りがない限り、Microsoft Macro Assembler (MASM) 式を使用しています。 MASM 式では、すべてのシンボルがアドレスとして扱われます。

C++ 式は、実際の C++ コードで使用されるものと同じです。 これらの式では、シンボルは適切なデータ タイプとして理解されます。

各構文を使用する場面

既定の式エバリュエーターを次の方法のいずれかで選択できます。

上記の方法のいずれも使用しない場合、デバッガーは MASM 式エバリュエーターを使用します。

デバッガーの状態を変更せずに式を評価する場合は、? (式の評価) コマンドを使用できます。

すべてのコマンドとデバッグ情報ウィンドウは、既定の式エバリュエーターを介して引数を解釈しますが、次の例外があります。

  • ?? (C++ 式の評価) コマンドは常に C++ 式エバリュエーターを使用する。

  • [ウォッチ] ウィンドウは常に C++ 式エバリュエーターを使用する。

  • [ローカル] ウィンドウは常に C++ 式エバリュエーターを使用する。

  • 一部の拡張機能コマンドは常に MASM 式エバリュエーターを使用する (その他の拡張機能コマンドは完全な式ではなく数値引数のみを受け付ける)。

  • 式の一部がかっこで囲まれており、式の前に 2 つのアットマーク (@@) を挿入した場合、その式はこの場合には通常使用されない式エバリュエーターによって評価される。

2 つのアットマーク (@@) を使用すると、1 つのコマンドの異なるパラメーターに対して 2 つの異なるエバリュエーターを使用できます。 また、長い式のさまざまな部分を異なる方法で評価することもできます。 2 つのアットマークを入れ子にすることができます。 2 つのアットマークが現れるたびに、もう一方の式エバリュエーターに切り替わります。

警告 C++ 式構文は、構造体や変数の操作には便利ですが、デバッガー コマンドのパラメーターのパーサーとしてはあまり適していません。 デバッガー コマンドを一般的な目的で使用している場合、またはデバッガーの拡張機能を使用している場合は、MASM 式構文を既定の式エバリュエーターとして設定する必要があります。 特定のパラメーターに C++ 式構文を使用する必要がある場合は、2 つのアットマーク (@@) 構文を使用します。

2 つの異なる式タイプの詳細については、「数値式の構文」を参照してください。

式での数値

MASM 式での数値は、現在の基数に従って解釈されます。 n (基数の設定) コマンドを使用して、既定の基数を 16、10、または 8 に設定できます。 プレフィックスのない数値はすべて、この基数で解釈されます。 既定の基数は、0x プレフィックス (16 進数)、0n プレフィックス (10 進数)、0t プレフィックス (8 進数)、または 0y プレフィックス (2 進数) を指定することで上書きできます。

C++ 式での数値は、特に指定しない限り、10 進数として解釈されます。 16 進整数を指定するには、数値の前に 0x を付けます。 8 進整数を指定するには、数値の前に 0 (ゼロ) を付けます。 (ただし、デバッガーの出力では、10 進数のプレフィックス 0n が使用される場合があります。)

複数の基数の数値を同時に表示する場合は、.formats (数値書式の表示) コマンドを使用します。

式でのシンボル

次の 2 種類の式は、シンボルの解釈方法が異なります。

  • MASM 式では、各シンボルはアドレスとして解釈されます。 シンボルが何を指すかに応じて、このアドレスはグローバル変数、ローカル変数、関数、セグメント、モジュール、またはその他の認識されたラベルのアドレスになります。

  • C++ 式では、各シンボルはそのタイプに従って解釈されます。 シンボルが何を指すかに応じて、整数、データ構造、関数ポインター、またはその他のデータ タイプとして解釈される場合があります。 C++ のデータ タイプに対応しないシンボル (非修飾のモジュール名など) は構文エラーになります。

シンボルがあいまいな場合は、その前にモジュール名と感嘆符 (!) を付けます。 シンボル名が 16 進数として解釈される可能性がある場合は、その前にモジュール名と感嘆符 (!) を付けるか、感嘆符のみを付けます。 シンボルがローカルであることを指定するには、モジュール名を省略し、シンボル名の前にドル記号と感嘆符 ($!) を付けます。 シンボルの解釈の詳細については、「シンボルの構文とシンボルの照合」を参照してください。

式で使用される演算子

式のタイプごとに、使用する演算子が異なります。

MASM 式で使用できる演算子とその優先規則の詳細については、「MASM の数値と演算子」を参照してください。

C++ 式で使用できる演算子とその優先規則の詳細については、「C++ の数値と演算子」を参照してください。

MASM の操作は常にバイトベースであり、C++ の操作は C++ のタイプ規則 (ポインター演算のスケーリングを含む) に従います。

さまざまな構文の例については、「混在式の例」を参照してください。