DBH の使用
DBH は、DbgHelp API (dbghelp.dll) の多くの関数を公開するコマンドライン ツールです。 シンボル ファイルの内容に関する情報を表示したり、ファイル内のシンボルについて特定の詳細を表示したり、さまざまな条件に一致するシンボルをファイル内で検索したりできます。 詳細については、「デバッグ ヘルプ ライブラリ」を参照してください。
DBH で利用できる機能は、x (シンボルの確認) などのコマンドによって WinDbg、KD、CDB 内で利用できる機能と似ています。
対話モードでの DBH の実行
単純なコマンド ラインを使用して DBH を起動し、調査するシンボルが含まれているターゲット モジュールを指定します。 ターゲット モジュールには、EXE プログラムまたは PDB シンボル ファイルを指定できます。 調査するプロセス ID (PID) を指定することもできます。 完全な構文については、「DBH コマンドライン オプション」を参照してください。
DBH を起動すると、指定したモジュールのシンボルが読み込まれ、さまざまなコマンドを入力できるプロンプトが表示されます。 使用できるコマンドの一覧については、「DBH コマンド」を参照してください。
たとえば、次のシーケンスでは、プロセス ID 4672 でターゲット プロセスを指定して DBH を起動してから、DBH プロンプトで enum コマンドを実行して特定のパターンに一致するシンボルを表示した後、q コマンドを実行して DBH を終了します。
C:\> dbh -p:4672
400000 : TimeTest
77820000 : ntdll
77740000 : kernel32
pid:4672 mod:TimeTest[400000]: enum TimeTest!ma*
index address name
1 42cc56 : main
3 415810 : malloc
5 415450 : mainCRTStartup
pid:4672 mod:TimeTest[400000]: q
goodbye
バッチ モードでの DBH の実行
DBH コマンドを 1 つだけ実行する場合は、コマンド ラインの末尾で指定できます。 これにより DBH は起動し、指定したモジュールが読み込まれ、指定したコマンドが実行されて終了します。
たとえば、前の例は 1 つのコマンド ラインに置き換えることができます。
C:\> dbh -p:4672 enum TimeTest!ma*
400000 : TimeTest
77820000 : ntdll
77740000 : kernel32
index address name
1 42cc56 : main
3 415810 : malloc
5 415450 : mainCRTStartup
DBH を実行するこのメソッドは、バッチ ファイルで簡単に使用できるためバッチ モードと呼ばれます。 このバージョンのコマンド ラインの後には、DBH 出力を別のプログラムにリダイレクトするパイプ ( | ) が続く場合もあります。
ターゲットの指定
DBH では、実行中のプロセスのプロセス ID、実行可能ファイルの名前、シンボル ファイルの名前の 3 つの方法でターゲットを選択できます。 たとえば、MyProg.exe のインスタンスが現在 1 つだけ実行されていて、プロセス ID が 1234 の場合、次のコマンドはほぼ同等です。
C:\> dbh -v -p:1234
C:\> dbh -v c:\mydir\myprog.exe
C:\> dbh -v c:\mydir\myprog.pdb
これらのコマンドの違いの 1 つは、プロセス ID を指定して DBH を起動すると、DBH がこのプロセスで使用されている実際の仮想アドレスを使用することです。 実行可能ファイル名またはシンボル ファイル名を指定して DBH を起動すると、DBH はモジュールのベース アドレスが標準値 (0x01000000 など) であると仮定します。 その後、ベース コマンドを使用して実際のベース アドレスを指定し、モジュール内のすべてのシンボルのアドレスをシフトすることができます。
DBH は、デバッガーで実行される方法で、ターゲット プロセスにアタッチされません。 DBH は、プロセスを開始または終了したり、プロセスの実行方法を変更したりできません。 DBH がプロセス ID でプロセスにアタッチするには、ターゲット プロセスが実行されている必要がありますが、DBH を起動したらターゲット プロセスを終了することができ、DBH はそのシンボルへのアクセスを続行します。
装飾シンボルと非装飾シンボル
既定では、DBH はシンボルを表示および検索するときに、非装飾シンボルの名前を使用します。 SYMOPT_UNDNAME シンボル オプションをオフにするか、DBH コマンド ラインに -d オプションを含める場合は、装飾が含まれます。
シンボルの装飾の詳細については、「パブリック シンボルとプライベート シンボル」を参照してください。
DBH の終了
DBH を終了するには、DBH プロンプトで q コマンドを使用します。