この記事では、WinDbg やその他のデバッグ ツールを使用してWindowsデバッグを開始する方法について説明します。 あなたは次のことを学びます:
- デバッガーをインストールし、ホスト システムとターゲット システムを設定する
- デバッグ環境を構成する
- カーネル モードとユーザー モードのシナリオに関する基本的なデバッグ手法をマスターする
注
代わりにクラッシュ ダンプを分析する場合は、「 ダンプ ファイルから情報を抽出する」を参照してください。
Windowsデバッグを開始するには、次の手順を実行します。
1. Windows デバッガーをインストールする
WinDbg をインストールして、アプリケーションとドライバー Windowsデバッグを開始します。 詳細なインストール手順については、「 WinDbg のインストール」を参照してください。
2. ホストシステムとターゲットシステムを特定する
通常、デバッグには 2 つの独立したコンピューター システムを使用します。これは、通常、プロセッサでの命令の実行が一時停止されるためです。 デバッガーは ホスト システムで実行され、デバッグするコードは ターゲット システムで実行されます。
ホスト <--------------------------------------------------> ターゲット
場合によっては、仮想マシンを 2 つ目のシステムとして使用できます。 たとえば、仮想 PC は、デバッグする必要があるコードと同じ PC 上で実行できます。 ただし、コードが低レベルのハードウェアと通信する場合は、仮想 PC を使用するのが最善の方法ではない可能性があります。 詳細については、「仮想マシンのネットワーク デバッグの設定 - KDNET」を参照してください。
3. デバッガーの種類 (カーネル モードまたはユーザー モード) を決定する
次に、カーネル モードデバッグとユーザーモードデバッグのどちらを使用するかを決定します。
オペレーティング システムと特権プログラムは、カーネル モード
実行されます。 カーネル モード コードには、システムの任意の部分にアクセスするためのアクセス許可があり、ユーザー モード コードのように制限されません。 カーネル モード コードは、ユーザー モードまたはカーネル モードで実行されている他のプロセスの任意の部分にアクセスできます。 コア OS 機能と多くのハードウェア デバイス ドライバーの多くは、カーネル モードで実行されます。 コンピューター上のアプリケーションとサブシステムは、ユーザー モード
実行されます。 ユーザー モードで実行されるプロセスは、独自の仮想アドレス空間内で実行されます。 システム ハードウェア、使用のために割り当てられていないメモリ、システムの整合性を損なう可能性があるその他の部分など、システムの多くの部分に直接アクセスすることは制限されています。 ユーザー モードで実行されるプロセスは、システムや他のユーザー モード プロセスから効果的に分離されるため、これらのリソースに干渉することはできません。
目的がドライバーをデバッグする場合は、ドライバーがカーネル モード ドライバーかユーザー モード ドライバーかを判断します。 Windows ドライバー モデル (WDM) ドライバーと Kernel-Mode Driver Framework (KMDF) はどちらもカーネル モード ドライバーです。 名前が示すように、User-Mode Driver Framework (UMDF) ドライバーはユーザー モード ドライバーです。
一部の問題では、コードがどのモードで実行されるかを判断するのが難しい場合があります。 その場合は、1 つのモードを選択し、そのモードで使用できる情報を確認する必要がある場合があります。 一部の問題では、ユーザー モードとカーネル モードの両方でデバッガーを使用する必要があります。
デバッグするモードによっては、さまざまな方法でデバッガーを構成して使用することが必要になる場合があります。 一部のデバッグ コマンドは両方のモードで同じように動作し、一部のコマンドは動作が異なります。
カーネル モード デバッグの次の手順
- WinDbg (カーネル モード) の使い始め - セットアップを完了し最初のデバッグ セッション
- ユニバーサル ドライバーのデバッグ: ステップ バイ ステップ ラボ (エコー カーネル モード) - エコー ドライバーを使用したハンズオン ラボ
- デバッグ ドライバー: ステップ バイ ステップ ラボ (Sysvad カーネル モード) - オーディオ ドライバーを使用したハンズオン ラボ
ユーザー モード デバッグの次の手順
- WinDbg を始める (ユーザー モード) - セットアップと初回のデバッグ セッションの完了
4. デバッガー環境を選択する
WinDbg デバッガーはほとんどの状況で適切に動作しますが、オートメーションやVisual Studioにコンソール デバッガーなど、別のデバッガーを使用したい場合があります。 詳細については、「デバッグ環境
5. ターゲットとホストの接続方法を決定する
通常は、イーサネット ネットワークを使用してターゲット システムとホスト システムを接続します。 早期起動作業を行っている場合、またはデバイスにイーサネット接続がない場合は、他のネットワーク接続オプションを使用できます。 詳細については、次の記事を参照してください。
6. 32 ビットまたは 64 ビットのデバッグ ツールを選択する
32 ビット デバッガーと 64 ビット デバッガーのどちらを使用する必要があるかは、ターゲット システムとホスト システムで実行されるWindowsのバージョンと、32 ビット コードと 64 ビット コードのどちらをデバッグしているかによって異なります。 詳細については、「32 ビットまたは 64 ビットデバッグ ツールの選択」を参照してください。
7. シンボルを構成する
WinDbg が提供するすべての高度な機能を使用するには、適切なシンボルを読み込む必要があります。 シンボルを適切に構成しないと、シンボルに依存する機能を使用しようとしたときにシンボルが使用できないことを示すメッセージが表示されます。 詳細については、「Symbols for Windows debuggingを参照してください。
8. ソース コードを構成する
目的が独自のソース コードをデバッグする場合は、ソース コードへのパスを構成する必要があります。 詳細については、「ソース パス
9. デバッガーの操作について理解する
このドキュメントの「デバッガー操作」セクションでは、さまざまなタスクのデバッガー操作について説明します。 たとえば、WinDbg でのログ ファイルの保持
10. デバッグ手法を理解する
標準的なデバッグ手法 ほとんどのデバッグ シナリオに適用されます。例としては、ブレークポイントの設定、呼び出し履歴の検査、メモリ リークの検出などがあります。 特定のテクノロジまたはコードの種類 特殊なデバッグ手法が適用されます。 例としては、プラグ アンド プレイデバッグ、KMDF デバッグ、RPC デバッグなどがあります。
11. デバッガー参照コマンドを使用する
デバッガーで作業するときは、さまざまなデバッグ コマンドを使用します。 デバッグ中にコマンドに関するヘルプを表示するには、 .hh コマンドの後にコマンド名を付けます。
例:
.hh bp # Get help on breakpoint commands
.hh k # Get help on call stack commands
使用可能なコマンドの完全な一覧については、「 デバッガーリファレンス」を参照してください。
12. 特定のテクノロジに対してデバッグ拡張機能を使用する
複数のデバッグ拡張機能を使用して、ドメイン固有のデータ構造を解析します。 詳細については、「特殊化された拡張機能」を参照してください。 デバッガー拡張機能を読み込む方法については、「デバッガー 拡張機能 DLL の読み込み」を参照してください。
13. 関連するWindows内部について学習する
このドキュメントでは、コア Windows内部に関する知識があることを前提としています。 メモリ使用量、コンテキスト、スレッド、プロセスなど、Windows内部の詳細については、Pavel Yosifovich、Mark E. Russinovich、David A. Solomon、Alex Ionescu による Windows Internals などのリソースを確認します。
14. 追加のデバッグ リソースを確認する
その他のリソースには、次の書籍とビデオがあります。
- Inside Windows デバッグ: 実践的なデバッグとトレース戦略 by Tarik Soulami
- Advanced Windows Debugging by Mario Hewardt and Daniel Pravat
- デフラグツール ビデオシリーズ、エピソード13から29、WinDbgについて
次のステップ
デバッグ モードを選択して続行します。
カーネル モード デバッグ (ドライバーと OS コンポーネントの場合):
ユーザー モード デバッグ (アプリケーションの場合):
追加のセットアップ ガイダンス: