デバッグ環境

使用可能なデバッグ環境は次の 6 つになります。

  • WinDbg
  • WinDbg (クラシック)
  • カーネル デバッガー (KD)
  • NTKD
  • Console Debugger (CDB)
  • NT シンボリック デバッガ― (NTSD)

次のセクションでは、デバッグ環境について説明します。

WinDbg

WinDbg は、最新のビジュアル、より高速なウィンドウ、本格的なスクリプトの操作性を備えた最新バージョンの WinDbg であり、拡張可能なデバッガー データ モデルを中心として構築されています。 WinDbg は WinDbg (クラシック) と同じ基本エンジンを使用しているため、使い慣れているコマンド、拡張機能、ワークフローをすべてこれまでどおりに使用できます。

詳細については、「WinDbg の機能」を参照してください。

WinDbg (クラシック)

Microsoft Windows Debugger WinDbg (クラシック) は、ユーザーモードとカーネルモードの両方をデバッグできる Windows ベースのデバッガーです。 WinDbg は、Windows カーネル、カーネルモード ドライバー、システム サービス、およびユーザー モード のアプリケーションとドライバーのデバッグを提供します。

WinDbg は、ソースレベルのデバッグに Visual Studio デバッグ シンボル形式を使用します。 PDB シンボル ファイルを持つモジュールから任意のシンボルまたは変数にアクセスでき、COFF シンボル ファイル (Windows .dbg ファイルなど) でコンパイルされたモジュールによって公開されるパブリック関数の名前にもアクセスできます。

WinDbg では、ソース コードの表示、ブレークポイントの設定、変数 (C++ オブジェクトを含む) 、スタック トレース、メモリの表示ができます。 ユーザーは、その [デバッガー コマンド] ウィンドウを使用して、さまざまなコマンドを発行できます。

カーネルモード デバッグの場合、WinDbg には 2 台のコンピューター (ホスト コンピューターとターゲット コンピューター) が通常は必要です。 WinDbg では、ユーザーモードとカーネルモードの両方のターゲットに対して、さまざまなリモート デバッグ オプションもサポートされています。

WinDbg は、CDB/NTSD および KD/NTKD に対応するグラフィカル インターフェイスです。

KD

Microsoft カーネル デバッガー (KD) は文字ベースのコンソール プログラムで、すべての NT ベースのオペレーティング システムでカーネルモード アクティビティの詳細分析が可能です。 KD を使用すると、カーネルモードのコンポーネントとドライバーをデバッグしたり、オペレーティング システム自体の動作を監視したりできます。 KD では、マルチプロセッサ デバッグもサポートされています。

通常、KD はデバッグ対象のコンピューターでは実行されません。 カーネルモード デバッグでは、2 台のコンピューター (ホスト コンピューターターゲット コンピューター) が必要です。

NTKD

KD デバッガ―には NTKD という名前のバリエーションがあります。 NTKD は、NTKD が起動時に新しいテキスト ウィンドウを生成するのに対し、KD は呼び出し元の [コマンド プロンプト] ウィンドウを継承するという点を除けば、あらゆる面において KD と同じです。

CDB

Microsoft コンソール デバッガー (CDB) は、Windows ユーザーモードのメモリとコンストラクトの低レベル分析が可能な文字ベースのコンソール プログラムです。 コンソール デバッガーという名前は、CDB がコンソール アプリケーションに分類されることを示すために使用されており、ターゲット アプリケーションがコンソール アプリケーションでなければならないということを意味するものではありません。 実際、CDB はコンソール アプリケーションとグラフィカル Windows プログラムの両方を完全にデバッグできます。

CDB は、現在実行中または最近クラッシュしたプログラム (ライブ分析) をデバッグするのに高い効果を発揮するものですが、セットアップは簡単です。 動作しているアプリケーションの振る舞いを調査するために使用できます。 アプリケーションが失敗した場合、CDB を使用してスタック トレースを取得したり、問題のあるパラメーターを確認したりできます。 文字ベースであるため、 (リモート アクセス サーバーを使用して) ネットワーク全体で適切に機能します。

CDB を使用すると、プログラム コードの表示と実行、ブレークポイントの設定、メモリ内の値の確認と変更ができます。 CDB では、バイナリコードの逆アセンブルを行い、アセンブリ命令を表示することで、バイナリ コードを分析できます。 ソース コードを直接分析することもできます。

CDB はアドレスまたはグローバル シンボルを利用してメモリ位置にアクセスできるため、データと命令を参照する際にはアドレスではなく名前を使用します。そうすれば、コードの特定のセクションを簡単に見つけてデバッグできます。 CDB では、複数のスレッドとプロセスのデバッグがサポートされています。 CDB は拡張可能であり、ページ メモリと非ページ メモリの両方を読み書きできます。

ターゲット アプリケーション自体がコンソール アプリケーションの場合、ターゲットは CDB とコンソール ウィンドウを共有します。 ターゲット コンソール アプリケーション用に別のコンソール ウィンドウを生成するには、-2 コマンドライン オプションを使用します。

NTSD

CDB デバッガ―には、Microsoft NT シンボリック デバッガ― (NTSD) という名前のバリエーションがあります。 NTSD は、NTSD が起動時に新しいテキスト ウィンドウを生成するのに対し、CDB は呼び出し元の [コマンド プロンプト] ウィンドウを継承するという点を除けば、あらゆる面において CDB と同じです。

start コマンドを使用して新しいコンソール ウィンドウを生成することもできるため、次の 2 つの構造で同じ結果が得られます。

start cdb parameters
ntsd parameters

NTSD (または CDB) からの入力と出力をリダイレクトして、カーネル デバッガー (Visual Studio、WinDbg、KD のいずれか) から制御できるようにすることができます。 この技法が NTSD で使用されている場合、コンソール ウィンドウは 1 つも表示されません。 そのためカーネル デバッガーから NTSD を制御すると、ターゲット アプリケーションを含むコンピューターにほとんど負担のかからない非常に軽量なデバッガーが可能になるため、特に有用です。 この組み合わせを使用して、システム プロセス、シャットダウン、および起動の後のステージをデバッグできます。 詳細については、「カーネル デバッガー からのユーザーモード デバッガーの制御」を参照してください。

関連項目

Windows のデバッグ

WinDbg の機能