グローバル変数へのアクセス

グローバル変数の名前は、アプリケーションのコンパイル時に作成される シンボル・ファイルに格納されます。 デバッガはグローバル変数の名前を仮想アドレスとして解釈します。 アドレスをパラメータとして受け付けるコマンドはすべて、変数名も受け付けます。 したがって、「仮想アドレスによるメモリへのアクセス」で説明されているすべてのコマンドを使用して、グローバル変数を読み書きすることができます。

さらに、も使用できますか? (Evaluate Expression)コマンドを使って、任意のシンボルに関連するアドレスを表示することができます。

WinDbg には、グローバル変数の表示と編集に使用できるユーザー・インター フェース・エレメントがあります(コマンドに加えて)。 WinDbg(Classic)のグローバル変数の表示と編集を参照してください。

以下の例を考慮してください。 32ビット整数であるMyCounterグローバル変数を調べたいとします。 また、デフォルトの基数は10であるとする。

この変数のアドレスを取得し、次のように表示することができる。

0:000> ? MyCounter 
Evaluate expression: 1244892 = 0012fedc
0:000> dd 0x0012fedc L1 
0012fedc  00000052

最初のコマンド出力は、そのアドレスがMyCounter0x0012FEDCであることを告げる。 次に、d*(Display Memory)コマンドを使って、このアドレスのダブルワードを1つ表示することができる。 (このアドレスの10進数である1244892を使うこともできます)。しかし、ほとんどのCプログラマーは0x0012FEDCを好んで使う)。番目のコマンドは、MyCounterの値が0x52(10進数82)であることを示します。

これらの手順は、次のコマンドでも実行できる。

0:000> dd MyCounter L1 
0012fedc  00000052

MyCounterの値を10進数の83に変更するには、次のコマンドを使用する。

0:000> ed MyCounter 83 

この例では10進数入力を使用しているが、これはその形式が整数としてより自然だと思われるためである。 しかし、d\*コマンドの出力は16進数のままである。

0:000> dd MyCounter L1 0012fedc  00000053