この記事では、WinDbg やその他のデバッグ ツールを使用して Windows デバッグを開始する方法について説明します。 次の方法について学習します。
- デバッガーをインストールし、ホスト システムとターゲット システムを設定する
- デバッグ環境を構成する
- カーネル モードとユーザー モードのシナリオに関する基本的なデバッグ手法をマスターする
手記: 代わりにクラッシュ ダンプを分析する場合は、「 WinDbg を使用してクラッシュ ダンプ ファイルを分析する」を参照してください。
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 が提供するすべての高度な機能を使用するには、適切なシンボルを読み込む必要があります。 シンボルを適切に構成しないと、シンボルに依存する機能を使用しようとしたときにシンボルが使用できないことを示すメッセージが表示されます。 詳細については、「windows デバッグの
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. ソロモン、Alex Ionescu による Windows Internals などのリソースを確認できます。
14. 追加のデバッグ リソースを確認する
その他のリソースには、次の書籍とビデオがあります。
- Windows デバッグの内部: Tarik Soulami による実用的なデバッグとトレース戦略
- マリオ・ヘワードとダニエル・プラヴァトによる高度なWindowsデバッグ の
- デフラグツール ビデオシリーズ、エピソード13から29、WinDbgについて
次のステップ
デバッグ モードを選択して続行します。
カーネル モード デバッグ (ドライバーと OS コンポーネントの場合):
ユーザー モード デバッグ (アプリケーションの場合):
追加のセットアップ ガイダンス: