次の方法で共有


Windows デバッグを始める

この記事では、Windows のデバッグを開始する方法について説明します。 デバッガーを使用してクラッシュ ダンプを分析することが目的の場合は、「WinDbgを使用してクラッシュ ダンプ ファイルを分析する を参照してください。

Windows のデバッグを開始するには、次の手順を実行します。

1. Windows デバッガーをインストールする

WinDbg のインストールの詳細については、「WinDbgのインストール を参照してください。

2. ホストシステムとターゲットシステムを特定する

通常、プロセッサでの命令の実行はプロセス中に一時停止されるため、デバッグには 2 つの独立したコンピューター システムが使用されます。 デバッガーは ホスト システムで実行され、デバッグするコードは ターゲット システムで実行されます。

ホスト <--------------------------------------------------> ターゲット

ホスト システムとターゲット システム間の接続を二重矢印で示す図。

場合によっては、仮想マシンを 2 つ目のシステムとして使用できます。 たとえば、デバッグする必要があるコードと同じ PC で仮想 PC を実行できます。 ただし、コードが低レベルのハードウェアと通信する場合は、仮想 PC を使用するのが最善の方法ではない可能性があります。 詳細については、「仮想マシンのネットワーク デバッグの設定 - KDNET」を参照してください。

3. デバッガーの種類 (カーネル モードまたはユーザー モード) を決定する

次に、カーネル モードデバッグとユーザーモードデバッグのどちらを使用するかを決定する必要があります。

  • オペレーティング システムと特権プログラムは、カーネル モード実行されます。 カーネル モード コードには、システムの任意の部分にアクセスするためのアクセス許可があり、ユーザー モード コードのように制限されません。 カーネル モード コードは、ユーザー モードまたはカーネル モードで実行されている他のプロセスの任意の部分にアクセスできます。 コア OS 機能と多くのハードウェア デバイス ドライバーの多くは、カーネル モードで実行されます。

  • コンピューター上のアプリケーションとサブシステムは、ユーザー モード実行されます。 ユーザー モードで実行されるプロセスは、独自の仮想アドレス空間内で実行されます。 システム ハードウェア、使用のために割り当てられていないメモリ、システムの整合性を損なう可能性があるその他の部分など、システムの多くの部分に直接アクセスすることは制限されています。 ユーザー モードで実行されるプロセスは、システムや他のユーザー モード プロセスから効果的に分離されるため、これらのリソースに干渉することはできません。

目的がドライバーをデバッグする場合は、ドライバーがカーネル モード ドライバーかユーザー モード ドライバーかを判断します。 Windows ドライバー モデル (WDM) ドライバーと Kernel-Mode Driver Framework (KMDF) はどちらもカーネル モード ドライバーです。 名前が示すように、User-Mode Driver Framework (UMDF) ドライバーはユーザー モード ドライバーです。

一部の問題では、コードがどのモードで実行されるかを判断するのが難しい場合があります。 その場合は、1 つのモードを選択し、そのモードで使用できる情報を確認する必要がある場合があります。 一部の問題では、ユーザー モードとカーネル モードの両方でデバッガーを使用する必要があります。

デバッグするモードによっては、さまざまな方法でデバッガーを構成して使用することが必要になる場合があります。 一部のデバッグ コマンドは両方のモードで同じように動作し、一部のコマンドは動作が異なります。

カーネル モードでのデバッガーの使用の詳細については、以下を参照してください。

ユーザー モードでのデバッガーの使用の詳細については、以下を参照してください。

4. デバッガー環境を選択する

WinDbg デバッガーはほとんどの状況で適切に機能しますが、オートメーションや Visual Studio 用のコンソール デバッガーなど、別のデバッガーを使用したい場合があります。 詳細については、「デバッグ環境を参照してください。

5. ターゲットとホストの接続方法を決定する

通常、ターゲット システムとホスト システムはイーサネット ネットワークによって接続されます。 早期起動作業を行っている場合、またはデバイスにイーサネット接続がない場合は、他のネットワーク接続オプションを使用できます。 詳細については、次の記事を参照してください。

6. 32 ビットまたは 64 ビットのデバッグ ツールを選択する

32 ビットデバッガーと 64 ビット デバッガーのどちらを使用する必要があるかは、ターゲット システムとホスト システムで実行される Windows のバージョンと、32 ビット コードと 64 ビット コードのどちらをデバッグしているかによって異なります。 詳細については、「32 ビットまたは 64 ビットデバッグ ツールの選択」を参照してください。

7. シンボルを構成する

WinDbg が提供するすべての高度な機能を使用するには、適切なシンボルを読み込む必要があります。 シンボルが正しく構成されていない場合は、シンボルに依存する機能を使用しようとしたときにシンボルが使用できないというメッセージが表示されます。 詳細については、「windows デバッグの シンボル」を参照してください。

8. ソース コードを構成する

目的が独自のソース コードをデバッグする場合は、ソース コードへのパスを構成する必要があります。 詳細については、「ソース パス参照してください。

9. デバッガーの操作について理解する

このドキュメントの「デバッガー操作」セクションでは、さまざまなタスクのデバッガー操作について説明します。 たとえば、WinDbg でのログ ファイルの保持 では、デバッグ セッションを記録するログ ファイルを WinDbg で書き込む方法について説明します。

10. デバッグ手法を理解する

標準的なデバッグ手法 ほとんどのデバッグ シナリオに適用されます。例としては、ブレークポイントの設定、呼び出し履歴の検査、メモリ リークの検出などがあります。 特定のテクノロジまたはコードの種類 特殊なデバッグ手法が適用されます。 たとえば、プラグ アンド プレイ デバッグ、KMDF デバッグ、RPC デバッグなどがあります。

11. デバッガー参照コマンドを使用する

デバッガーで作業する際に、さまざまなデバッグ コマンドを使用できます。 デバッガーで .hh コマンド を使用して、デバッグ コマンドに関する有用な情報を表示します。 使用可能なコマンドの詳細については、「デバッガーリファレンス参照してください。

12. 特定のテクノロジに対してデバッグ拡張機能を使用する

ドメイン固有のデータ構造を解析するために使用できる複数のデバッグ拡張機能があります。 詳細については、「特殊化された拡張機能」を参照してください。 デバッガー拡張機能 DLL の読み込み デバッガー拡張機能を読み込む方法について説明します。

このドキュメントでは、主要な Windows 内部に関する知識があることを前提としています。 メモリ使用量、コンテキスト、スレッド、プロセスなど、Windows 内部の詳細については、Pavel Yosifovich、Mark E. Russinovich、David A. ソロモン、Alex Ionescu による windows Internals の などのリソースを確認できます。

14. 追加のデバッグ リソースを確認する

その他のリソースには、次の書籍とビデオがあります。

  • Windows デバッグの内部: Tarik Soulami による実用的なデバッグとトレース戦略
  • マリオ・ヘワードとダニエル・プラヴァトによる高度なWindowsデバッグ の
  • デフラグツール ビデオシリーズ、エピソード13から29、WinDbgについて

関連項目