Windows のデバッグの概要Getting Started with Windows Debugging

この記事では、Windows のデバッグの開始方法について説明します。This article covers how to get started with Windows Debugging. デバッガーを使用してクラッシュ ダンプを分析することが目的の場合は、「WinDbg を使用してクラッシュ ダンプ ファイルを分析する」を参照してください。If your goal is to use the debugger to analyze a crash dump, see Analyze crash dump files by using WinDbg.

Windows のデバッグを開始するには、この記事で説明されているタスクを完了します。To get started with Windows Debugging, complete the tasks that are described in this article.

1.ホストとターゲットを決定する1. Determine the host and the target

デバッガーは "ホスト" システムで実行され、デバッグするコードは "ターゲット" システムで実行されます。The debugger runs on the host system, and the code that you want to debug runs on the target system.

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

二重の矢印で結び付けられたホスト PC とターゲット PC

プロセッサでの命令の実行は、デバッグ時には停止されるのが一般的であるため、通常は 2 台のコンピューター システムが使用されます。Because it is common to stop instruction execution on the processor during debugging, two computer systems are typically used. 場合によっては、仮想マシンを 2 台目のシステムとして使用できることもあります。In some situations, you might be able to use a virtual machine as the second system. たとえば、デバッグする必要のあるコードと同じ PC で実行されている仮想 PC を使用できる場合があります。For example, you might be able to use a virtual PC that is running on the same PC as the code that you need to debug. ただし、コードが低レベルのハードウェアと通信している場合は、仮想 PC を使用するのは最善の方法ではない可能性があります。However, if your code is communicating to low-level hardware, using a virtual PC may not be the best approach. 詳細については、「仮想マシンのネットワーク デバッグの設定 - KDNET」を参照してください。For more information, see Setting up network debugging of a virtual machine - KDNET.

2.種類 (カーネルモードまたはユーザーモード) を決定する2. Determine the type: kernel-mode or user-mode

次に、カーネルモードとユーザーモードのどちらでデバッグを行うかを決定する必要があります。Next, you need to determine whether you will do kernel-mode or user-mode debugging.

"カーネル モード" は、オペレーティング システムと特権プログラムが実行されるプロセッサアクセス モードです。Kernel mode is the processor-access mode in which the operating system and privileged programs run. カーネルモード コードには、システムの任意の部分にアクセスするためのアクセス許可があり、ユーザーモード コードのように制限されていません。Kernel-mode code has permission to access any part of the system, and it is not restricted like user-mode code. カーネルモード コードでは、ユーザー モードまたはカーネル モードのいずれかで実行されている他のプロセスの任意の部分にアクセスできます。Kernel-mode code can gain access to any part of any other process running in either user mode or kernel mode. コア OS 機能の大部分と多くのハードウェア デバイス ドライバーは、カーネル モードで実行されます。Much of the core OS functionality and many hardware device drivers run in kernel mode.

"ユーザー モード" は、コンピューター上でアプリケーションとサブシステムが実行されるモードです。User mode is the mode that applications and subsystems on the computer run in. ユーザー モードで実行されるプロセスは、独自の仮想アドレス空間内で実行されます。Processes that run in user mode do so within their own virtual address spaces. これらは、システムの多くの部分に直接アクセスすることが制限されています。これには、システム ハードウェア、使用するために割り当てられていないメモリ、システムの整合性を損なう可能性があるシステムのその他の部分などが含まれます。They are restricted from gaining direct access to many parts of the system, including system hardware, memory that was not allocated for their use, and other portions of the system that might compromise system integrity. ユーザー モードで実行されるプロセスは、システムおよびその他のユーザーモード プロセスから事実上分離されるため、これらのリソースに干渉することはできません。Because processes that run in user mode are effectively isolated from the system and other user-mode processes, they cannot interfere with these resources.

ドライバーをデバッグすることが目的の場合は、ドライバーがカーネルモード ドライバーなのか、ユーザーモード ドライバーなのかを確認します。If your goal is to debug a driver, determine if the driver is a kernel-mode driver or a user-mode driver. Windows Driver Model (WDM) ドライバーとカーネルモード ドライバー フレームワーク (KMDF) は、どちらもカーネルモード ドライバーです。Windows Driver Model (WDM) drivers and Kernel-Mode Driver Framework (KMDF) are both kernel-mode drivers. 名前が示すように、ユーザー モード ドライバー フレームワーク (UMDF) ドライバーはユーザーモード ドライバーです。As the name sugests, User-Mode Driver Framework (UMDF) drivers are user-mode drivers.

問題によっては、コードがどのモードで実行されるかを判断するのが困難な場合があります。For some issues, it can be difficult to determine which mode the code executes in. その場合は、1 つのモードを選択し、そのモードで入手可能な情報を確認する必要があります。In that case, you may need to pick one mode and look to see what information is available in that mode. 一部の問題では、ユーザー モードとカーネル モードの両方でデバッガーを使用する必要があります。Some issues require using the debugger in both user mode and kernel mode.

どのモードでデバッグするかに応じて、異なる方法でデバッガーを構成して使用する必要があります。Depending on what mode you decide to debug in, you will need to configure and use the debuggers in different ways. 両方のモードで同じように動作するデバッグ コマンドもあれば、モードによって動作が異なるコマンドもあります。Some debugging commands operate the same in both modes, and some commands operate differently in different modes.

カーネル モードでのデバッガーの使用の詳細については、次の記事を参照してください。For information about using the debugger in kernel mode, see the following articles:

ユーザー モードでのデバッガーの使用の詳細については、「WinDbg の概要 (ユーザー モード)」を参照してください。For information about using the debugger in user mode, see Getting started with WinDbg (user-mode).

3.デバッガー環境を選択する3. Choose your debugger environment

WinDbg は、ほとんどの状況で適切に機能しますが、別のデバッガー (自動化や Visual Studio のコンソール デバッガーなど) を使用することが必要になる場合があります。WinDbg works well in most situations, but there are times when you may want to use another debugger, such as console debuggers for automation or Visual Studio. 詳細については、「デバッグ環境」を参照してください。For more information, see Debugging environments.

4.ターゲットとホストの接続方法を決定する4. Determine how to connect the target and host

通常、ターゲット システムとホスト システムはイーサネット ネットワークによって接続されています。Typically, target and host systems are connected by an Ethernet network. 初期の起動作業を行っている場合、またはデバイスにイーサネット接続がない場合は、他のネットワーク接続オプションを使用できます。If you are doing early bring-up work, or you don't have an Ethernet connection on a device, other network connection options are available. 詳しくは、次の記事をご覧ください。For more information, see these articles:

5.32 ビットまたは 64 ビットのいずれかのデバッグ ツールを選択する5. Choose either the 32-bit or 64-bit debugging tools

32 ビットまたは 64 ビットのどちらのデバッグ ツールを選択するかは、ターゲット システムとホスト システムで実行されている Windows のバージョンと、32 ビットまたは 64 ビットのどちらのコードをデバッグしているかによって異なります。Which debugging tools to choose—32-bit or 64-bit—depends on the version of Windows that is running on the target and host systems and on whether you are debugging 32-bit or 64-bit code. 詳細については、「32 ビットまたは 64 ビット デバッグ ツールの選択」を参照してください。For more information, see Choosing the 32-Bit or 64-Bit debugging tools.

6.シンボルを構成する6. Configure symbols

WinDbg で提供されている高度な機能のすべてを使用するには、適切なシンボルを読み込む必要があります。To use all of the advanced functionality that WinDbg provides, you must load the proper symbols. シンボルが適切に構成されていない場合は、シンボルに依存する機能を使用しようとしたときに、そのシンボルが使用できないことを示すメッセージが表示されます。If you do not have symbols properly configured, you will receive messages indicating that symbols are not available when you attempt to use functionality that is dependent on symbols. 詳細については、「Windows デバッグ用シンボル (WinDbg、KD、CDB、NTSD)」を参照してください。For more information, see Symbols for Windows debugging (WinDbg, KD, CDB, NTSD).

7.ソース コードを構成する7. Configure source code

独自のソース コードをデバッグすることが目的の場合は、そのソース コードへのパスを構成する必要があります。If your goal is to debug your own source code, you will need to configure a path to your source code. 詳細については、「ソース パス」を参照してください。For more information, see Source path.

8.デバッガーの操作に慣れる8. Become familiar with debugger operation

このドキュメントの「デバッガーの操作」セクションでは、さまざまなタスクのデバッガー操作について説明しています。The Debugger operation section of this documentation describes debugger operation for various tasks. たとえば、「デバッガー拡張機能 DLL の読み込み」では、デバッガー拡張機能を読み込む方法について説明しています。For example, Loading debugger extension DLLs explains how to load debugger extensions. WinDbg の操作の詳細については、「WinDbg を使用したデバッグ」を参照してください。To learn more about working with WinDbg, see Debugging using WinDbg.

9.デバッグ手法について理解を深める9. Become familiar with debugging techniques

標準的なデバッグ手法は、ほとんどのデバッグ シナリオに適用されます。例として、ブレークポイントの設定、呼び出し履歴の検査、メモリ リークの検出などがあります。Standard debugging techniques apply to most debugging scenarios, and examples include setting breakpoints, inspecting the call stack, and finding a memory leak. 特殊なデバッグ手法は、特定のテクノロジまたはコードの種類に適用されます。Specialized debugging techniques apply to particular technologies or types of code. 例として、プラグ アンド プレイのデバッグ、KMDF のデバッグ、RPC のデバッグなどがあります。Examples include Plug and Play debugging, KMDF debugging, and RPC debugging.

10.デバッガーの参照コマンドを使用する10. Use the debugger reference commands

そのうちに、デバッガーでの作業にさまざまなデバッグ コマンドを使用するようになります。Over time, you will use different debugging commands as you work in the debugger. デバッグ コマンドに関するヘルプ情報を表示するには、デバッガーで .hh (HTML ヘルプ ファイルを開く) コマンドを使用します。Use the .hh (open HTML help file) command in the debugger to display help information about any debugging command. 使用可能なコマンドの詳細については、「デバッガー リファレンス」を参照してください。For more information about the available commands, see Debugger reference.

11.特定のテクノロジに対してデバッグ拡張機能を使用する11. Use debugging extensions for specific technologies

ドメイン固有のデータ構造の解析を提供する複数のデバッグ拡張機能があります。There are multiple debugging extensions that provide parsing of domain-specific data structures. 詳細については、「特殊な拡張機能」を参照してください。For more information, see Specialized extensions.

このドキュメントでは、Windows の内部構造に関する知識があることを前提としています。This documentation assumes a knowledge of Windows internals. Windows の内部構造 (メモリ使用量、コンテキスト、スレッド、プロセスなど) の詳細については、『Windows Internals』(Mark Russinovich、David Solomon、Alex Ionescu 著) などのその他のリソースをご確認ください。To learn more about Windows internals (including memory usage, context, threads, and processes), review additional resources, such as Windows Internals by Mark Russinovich, David Solomon, and Alex Ionescu.

13.その他のデバッグに関するリソースを確認する13. Review additional debugging resources

その他のリソースには、次の書籍とビデオが含まれます。Additional resources include the following books and videos:

  • Inside Windows Debugging:Practical Debugging and Tracing Strategies (Tarik Soulami 著)Inside Windows Debugging: Practical Debugging and Tracing Strategies by Tarik Soulami
  • Advanced Windows Debugging(Mario Hewardt、Daniel Pravat 著)Advanced Windows Debugging by Mario Hewardt and Daniel Pravat
  • Defrag Tools (デフラグ ツール) のエピソード 13 から 29、WinDbg についてDefrag Tools, episodes 13 through 29, about WinDbg

関連項目See also