複数ターゲットのデバッグ
複数のダンプ ファイルまたはライブ ユーザー モード アプリケーションを同時にデバッグできます。 各ターゲットには 1 つ以上のプロセスが含まれており、各プロセスには 1 つ以上のスレッドが含まれています。
これらのターゲットは、システムにグループ化もされます。 システムは、識別と操作を容易にするためにグループ化されたターゲットのセットです。 システムの定義は次のとおりです。
カーネル モードまたはユーザー モードのダンプ ファイルはそれぞれ別個のシステムです。
複数の異なるコンピューターでライブ ユーザー モード アプリケーションをデバッグしているとき (Dbgsrv などのプロセス サーバーを使用) 、各アプリケーションは別個のシステムです。
ローカル コンピューターでライブ ユーザー モード アプリケーションをデバッグしているとき、複数のアプリケーションが単一のシステムに統合されます。
現在またはアクティブなシステムとは、現在デバッグしているシステムです。
複数ターゲットの取得
最初のターゲットは通常の方法で取得されます。
.attach (プロセスへのアタッチ) または .create (プロセスの作成) コマンドの後に g (実行) コマンドを使用して、追加のライブ ユーザー モード アプリケーションをデバッグできます。
.opendump (ダンプ ファイルを開く) コマンドの後に g (実行) コマンドを使用して、追加のダンプ ファイルをデバッグできます。 デバッガーの起動時に、複数のダンプ ファイルを開くこともできます。 複数のダンプ ファイルを開くには、コマンドに複数の -z スイッチを含め、その後に別々のファイル名を指定します。
上記のコマンドは、プロセスが別々のシステムにある場合でも使用できます。 各システムでプロセス サーバーを起動し、.attach または .create で -premote パラメーターを使用して、適切なプロセス サーバーを識別する必要があります。 -premote パラメーターを指定せずに .attach または .create コマンドをもう一度使用すると、デバッガーはプロセスを現在のシステムにアタッチするか作成します。
システムとターゲットの操作
デバッグの開始時、現在のシステムはデバッガーが最後にアタッチしたシステムです。 例外が発生した場合、現在のシステムはその例外が発生したシステムに切り替わります。
1 つのターゲットを閉じ、他のターゲットのデバッグ続けるには、.kill (プロセスの強制終了) コマンドを使用します。 代わりに、.detach (プロセスからデタッチ) コマンドまたは WinDbg の [デバッグ | デバッグ対象のデタッチ] メニュー コマンドを使用できます。 これらのコマンドは、ターゲットからデバッガーをデタッチしますが、ターゲットは実行したままにします。
複数のシステムのデバッグを制御するには、以下の方法を使用できます。
|| (システムの状態) コマンドで、1 つ以上のシステムに関する情報を表示します
||s (現在のシステムの設定) コマンドを使用すると、現在のシステムを選択できます
(WinDbg のみ) [プロセスとスレッド] ウィンドウ を使用すると、システム、プロセス、スレッドを表示または選択できます。
これらのコマンドを使用して現在のシステムを選択し、標準コマンドを使用して現在のプロセスとスレッドを選択することで、メモリとレジスタを表示するコマンドのコンテキストを決定できます。
ただし、これらのプロセスの実行を分離することはできません。 g (実行) コマンドを実行すると、すべてのターゲットが常に一緒に実行されます。
注 ライブ ターゲットとダンプ ターゲットを一緒にデバッグすると、コマンドの動作がデバッグの種類ごとに異なるため、複雑になります。 たとえば、現在のシステムがダンプ ファイルであるときに g (実行) コマンドを使用すると、デバッガーは実行を開始しますが、break コマンドはダンプ ファイルのデバッグに有効であると認識されないため、デバッガーにブレーク バックすることはできません。
例
同時に 3 つのダンプ ファイルで作業するには、WinDbg の起動時に -z オプションを使用して読み込むことができます。
windbg -z c:\notepad.dmp -z c:\paint.dmp -z c:\calc.dmp
詳細については、「WinDbg コマンド ライン オプション」を参照してください。 また、.opendump および g (実行) コマンドを使用して、デバッガーに追加のダンプ ファイルを読み込むこともできます。
|| (システムの状態) コマンドを使用して、3 つのシステムがすべて存在することを確認します。
||0:0:007> ||
. 0 User mini dump: c:\notepad.dmp
1 User mini dump: C:\paint.dmp
2 User mini dump: c:\calc.dmp
g (実行) コマンドを使用して、ダンプ ファイルの読み込みを完了します。
||0:0:007> g
************* Path validation summary **************
Response Time (ms) Location
Deferred srv*
Symbol search path is: srv*
Executable search path is:
Windows 10 Version 15063 MP (4 procs) Free x64
Product: WinNt, suite: SingleUserTS
15063.0.amd64fre.rs2_release.170317-1834
Machine Name:
Debug session time: Fri Jun 9 15:52:04.000 2017 (UTC - 7:00)
System Uptime: not available
Process Uptime: 0 days 0:03:44.000
...............................................................
This dump file has a breakpoint exception stored in it.
The stored exception information can be accessed via .ecxr.
ntdll!DbgBreakPoint:
00007ff8`aada8d70 cc int 3
次に ||s (現在のシステムの設定) コマンドを使用して、現在のシステムをシステム 1 に設定し、現在のシステムを表示します。
||1:1:017> ||1s
||1:1:017> ||
0 User mini dump: c:\notepad.dmp
. 1 User mini dump: c:\paint.dmp
2 User mini dump: c:\calc.dmp
現在のダンプ ファイルの確認が完了したら、.detach コマンドを使用できます。
||1:1:017> .detach
ntdll!DbgBreakPoint:
00007ff8`aada8d70 cc int 3
Detached
||0:0:007> ||
. 0 User mini dump: c:\notepad.dmp
2 User mini dump: c:\calc.dmp
リソース
デバッグに関する追加情報については、以下のリソースを参照してください。
ブック
Advanced Windows Debugging(Mario Hewardt、Daniel Pravat 著)
Inside Windows Debugging: A Practical Guide to Debugging and Tracing Strategies in Windows (Tarik Soulami 著)
Windows Internals (Pavel Yosifovich、Alex Ionescu、Mark E. Russinovich、および David A. Solomon 著)
ビデオ
デフラグ ツール ショー WinDbg エピソード 13 ~ 29: </shows/defrag-tools/>