ユーザーモード ダンプ ファイル

この記事では、ユーザーモード ダンプ ファイルの概要と、それらを使用してバグやクラッシュを解決する方法について説明します。

ダンプ ファイルの分析の詳細については、「ユーザーモード ダンプ ファイルの分析」を参照してください。

ユーザーモード ダンプ ファイルの種類

複数の種類のユーザーモード クラッシュ ダンプ ファイルを使用できます。 ダンプ ファイルの種類は、次の 2 つのカテゴリに分かれています。

ダンプ ファイルを分析すると、大量の情報を取得できます。 ただし、デバッガーを使用してクラッシュのデバッグから得られる情報量を提供できるダンプ ファイルはありません。

完全なユーザーモード ダンプ

完全なユーザーモード ダンプは、基本的なユーザーモード ダンプ ファイルです。 完全なユーザーモード ダンプ ファイルには、次のものが含まれます。

  • プロセスのメモリ領域全体。
  • プログラムの実行可能イメージ。
  • ハンドル テーブル。
  • ダンプが発生したときに使用されたメモリをデバッガーが再構築するのに役立つその他の情報。

完全なユーザーモード ダンプ ファイルをミニダンプに圧縮できます。 完全なユーザーモード ダンプ ファイルを圧縮するには、まずはデバッガーにダンプ ファイルを読み込みます。 次に、.dump (ダンプ ファイルの 作成) コマンドを使用して、新しいダンプ ファイルをミニダンプ形式で保存します。

名前にかかわらず、最大のミニダンプ ファイルには、完全なユーザーモード ダンプ ファイルよりも多くの情報が含まれています。 たとえば、.dump /mf コマンドと .dump /ma コマンドは、.dump /f コマンドよりも大きく、より完全なファイルを作成します。

ユーザー モードでは、多くの場合、.dump /m[MiniOptions] が最適な選択です。 このスイッチを使用して作成するダンプ ファイルのサイズは、非常に小さいものから非常に大きいものまで異なる場合があります。 正しい MiniOptions スイッチを指定すると、どの情報を含めるかを正確に制御できます。

ミニダンプ

ミニダンプ ファイルのサイズと内容は、ダンプ対象のプログラム、ダンプを実行するアプリケーション、および選択したオプションによって異なります。 ミニダンプ ファイルが適度に大きく、完全なメモリとハンドル テーブルが含まれている場合があります。 また、ミニダンプ ファイルがはるかに小さい場合もあります。 たとえば、ミニダンプ ファイルには 1 つのスレッドに関する情報のみが含まれる場合や、スタックで参照されるモジュールに関する情報のみが含まれている場合があります。

最大のミニダンプ ファイルには完全なユーザーモード ダンプ ファイルよりも多くの情報が含まれているため、ミニダンプという用語は誤解を招きます。 たとえば、.dump /mf または .dump /ma は、.dump /f よりも大きく、より完全なファイルを作成します。 こうした理由から、すべてのユーザーモード ダンプ ファイルを作成する場合は、.dump /f ではなく、.dump /m[MiniOptions] を使用することをお勧めします。

デバッガーを使用してミニダンプ ファイルを作成する場合は、含める情報を選ぶことができます。 .dump /m コマンドには、ターゲット プロセス、スレッド情報、スタック情報を構成する、読み込まれたモジュールについての基本情報が含まれています。 基本的なコマンドを変更するには、次の表に示すスイッチ オプションのいずれかを使用します。

.dump オプション ダンプ ファイルへの影響
/ma すべてのオプションの追加を含むミニダンプを作成します。 /ma オプションは /mfFhut と同等です。 フル メモリ データ、ハンドル データ、アンロードされたモジュール情報、基本的なメモリ情報、スレッド時間情報をミニダンプに追加します。
/mf フル メモリ データをミニダンプに追加します。 ターゲット アプリケーションが所有する、アクセス可能なコミット済みページがすべて含まれます。
/mF すべての基本的なメモリ情報をミニダンプに追加します。 このスイッチにより、有効なメモリに関する情報だけでなく、すべての基本的なメモリ情報を含むストリームがミニダンプに追加されます。 デバッガーはこの情報を使用して、ミニダンプのデバッグ中にプロセスの完全な仮想メモリ レイアウトを再構築します。
/mh ターゲット アプリケーションに関連付けられているハンドルに関するデータをミニダンプに追加します。
/mu アンロードされたモジュール情報をミニダンプに追加します。 このオプションは、Windows Server 2003 以降のバージョンの Windows でのみ使用できます。
/mt その他のスレッド情報をミニダンプに追加します。 スレッド情報にはスレッド時間が含まれます。これは、ミニダンプをデバッグするときに .ttime (スレッド時間の表示) を使用して表示できます。
/mi 2 次メモリをミニダンプに追加します。 2 次メモリとは、スタックまたはバッキング ストア上のポインタによって参照されるメモリと、このアドレスを囲む小さな領域を指します。
/mp プロセス環境ブロック データとスレッド環境ブロック データをミニダンプに追加します。 この情報は、アプリケーションのプロセスとスレッドに関する Windows システム情報にアクセスする必要がある場合に役立ちます。
/mw コミットされたすべての読み取り/書き込みプライベート ページをミニダンプに追加します。
/md 実行可能イメージ内のすべての読み取り/書き込みデータ セグメントをミニダンプに追加します。
/mc イメージ内にコード セクションを追加します。
/mr スタックのミニダンプ部分から削除し、スタック トレースの再作成に使用されないメモリを格納します。 ローカル変数およびその他のデータ型の値も削除されます。 このオプションでミニダンプが小さくなるわけではありません (未使用のメモリ セクションはゼロになるため) が、他のアプリケーションのプライバシーを保護する場合に便利です。
/mR ミニダンプから完全なモジュール パスを削除します。 モジュール のみが含まれます。 このオプションは、ユーザーのディレクトリ構造のプライバシーを保護する場合に便利です。

これらのスイッチ オプションは組み合わせることができます。 たとえば、アンロードされたメモリと 2 次 メモリを含む適度に大きなミニダンプを作成するには、コマンド .dump /mfiu を使用します。 ユーザーの情報の一部を削除するミニダンプを作成するには、コマンド .dump /mrR を使用します。 完全な構文の詳細については、.dump (ダンプ ファイルの作成)を参照してください。

ダンプ ファイルの作成に使用するツール

ユーザーモード ダンプ ファイルを作成するために使用できる異なるツールがいくつかあります。

  • ProcDump
  • CDB
  • WinDbg

ProcDump

ProcDump は、アプリケーションの CPU スパイクを監視したり、スパイク中にクラッシュ ダンプを生成したりするために使用できるコマンドライン ユーティリティです。 管理者または開発者はクラッシュ ダンプ ファイルを使用して、スパイクの原因を特定できます。 ProcDump には、ハングしたウィンドウ (Windows とタスク マネージャーで使用されるウィンドウ ハングと同じ定義を使用) と未処理の例外の監視も含まれます。 ProcDump を使用すると、システム パフォーマンス カウンターの値に基づいてダンプを生成できます。 ProcDump は、他のスクリプトに埋め込むことができる一般的なプロセス ダンプ ユーティリティとしても機能します。

Sysinternals ProcDump ユーティリティを使用したユーザーモード ダンプ ファイルの作成の詳細については、ProcDump を参照してください。

CDB と WinDbg

コンソール デバッガー (CDB) と Windows デバッガー (WinDbg) は、Windows ソフトウェア開発キットと Windows ドライバー キットに含まれるデバッグ ツールです。 「WinDbg Windows デバッガーのダウンロードとインストール」のインストール オプションを参照してください。

CDB または WinDbg を使用すると、複数の方法でユーザーモード ダンプ ファイルを作成できます。

  • ダンプ ファイルを自動的に作成します。
  • デバッグ時にダンプ ファイルを作成します。
  • 既存のダンプ ファイルを圧縮します。

ツールの詳細については、「Windows デバッグの概要」と「CDB を使用したデバッグ」を参照してください。

ダンプ ファイルを自動的に作成する

アプリケーション エラーが発生すると、事後デバッグ設定に応じて、いくつかある方法のいずれかで Windows が応答する場合があります。 これらの設定により、デバッグ ツールでダンプ ファイルを作成することが指示されている場合は、ユーザーモードのメモリ ダンプ ファイルが作成されます。 詳細については、「事後デバッグを有効にする」を参照してください。

デバッグ時にダンプ ファイルを作成する

CDB または WinDbg がユーザーモード アプリケーションをデバッグしている場合は、.dump (ダンプ ファイルの作成) コマンドを使用してダンプ ファイルを作成することもできます。

このコマンドを実行しても、ターゲット アプリケーションは終了しません。 特定のコマンド オプションを選択すると、必要な情報量を正確に含むミニダンプ ファイルを作成できます。

既存のダンプ ファイルを圧縮する

CDB または WinDbg を使用してダンプ ファイルを圧縮できます。 ダンプ ファイルを圧縮するには、既存のダンプ ファイルのデバッグを開始します。 次に、.dump コマンドを使用して、より小さいサイズのダンプ ファイルを作成します。

タイム トラベル デバッグ

ユーザーモード アプリケーションをデバッグする別のオプションは、タイム トラベル デバッグ (TTD) です。 TTD は、実行中にプロセスを記録するために使用できるツールです。 デバッガー セッションの記録を再生して、バグを見つけることができます。 バグに至った状態と問題の修正方法を理解するために、記録のさまざまな部分に簡単に移動できます。

TTD には、クラッシュ ダンプ ファイルよりも大きな利点があります。クラッシュ ダンプ ファイルは、障害の原因となったコードの実行が欠落していることがよくあります。 コードの実行を逆にたどれる機能は、根本原因を特定するのに役立ちます。

詳細については、「タイム トラベル デバッグの概要」を参照してください。

次のステップ