ユーザー モード ダンプ ファイル
この記事では、ユーザー モード ダンプ ファイルの概要と、それらを使用してバグやクラッシュを解決する方法について説明します。
ダンプ ファイルの分析の詳細については、「 ユーザー モード ダンプ ファイルを分析する」を参照してください。
ユーザー モード ダンプ ファイルの種類
複数の種類のユーザー モード クラッシュ ダンプ ファイルを使用できます。 ダンプ ファイルの種類は、次の 2 つのカテゴリに分かれています。
ダンプ ファイルを分析することで、大量の情報を取得できます。 ただし、デバッガーを使用してクラッシュのデバッグから得られる情報の量を提供できるダンプ ファイルはありません。
完全なユーザー モード ダンプ
完全なユーザー モード ダンプは、基本的なユーザー モード ダンプ ファイルです。 完全なユーザー モード ダンプ ファイルには、次のものが含まれます。
- プロセスのメモリ領域全体。
- プログラムの実行可能イメージ。
- ハンドル テーブル。
- ダンプが発生したときに使用されていたメモリをデバッガーが再構築するのに役立つその他の情報。
完全なユーザー モード ダンプ ファイルをミニダンプに 圧縮 できます。 完全なユーザー モード ダンプ ファイルを圧縮するには、まずデバッガーでダンプ ファイルを読み込みます。 次に、 .dump (ダンプ ファイルの作成) コマンドを使用して、新しいダンプ ファイルをミニダンプ形式で保存します。
名前にもかかわらず、最大のミニダンプ ファイルには、完全なユーザー モード ダンプ ファイルよりも多くの情報が含まれています。 たとえば、 コマンドと .dump /ma
コマンドでは.dump /mf
、 コマンドよりも大きく完全なファイルが.dump /f
作成されます。
ユーザー モードでは、多くの場合、[.dump /m
MiniOptions] が最適な選択肢です。 このスイッチを使用して作成するダンプ ファイルのサイズは、非常に小さいものから非常に大きなものまでさまざまです。 適切な MiniOptions スイッチを指定することで、含まれる情報を正確に制御できます。
ミニダンプ
ミニダンプ ファイルのサイズと内容は、ダンプするプログラムと、ダンプを実行しているアプリケーションと選択したオプションによって異なります。 ミニダンプ ファイルが中程度に大きく、完全なメモリとハンドル テーブルが含まれている場合があります。 また、ミニダンプ ファイルがはるかに小さい場合もあります。 たとえば、ミニダンプ ファイルには 1 つのスレッドに関する情報のみが含まれている場合や、スタックで参照されているモジュールに関する情報のみが含まれている場合があります。
ミニダンプという用語は、最大の ミニダンプ ファイルには完全なユーザー モード ダンプ ファイルよりも多くの情報が含まれているため、誤解を招きます。 たとえば、 .dump /mf
または を使用すると .dump /ma
、 よりも大きく完全なファイルが .dump /f
作成されます。 このため、すべてのユーザー モード ダンプ ファイルを作成する代わりに .dump /f
[MiniOptions] を使用.dump /m
することをお勧めします。
デバッガーを使用してミニダンプ ファイルを作成する場合は、含める情報を選択できます。 コマンドには .dump /m
、ターゲット プロセス、スレッド情報、スタック情報を構成する読み込まれたモジュールに関する基本情報が含まれています。 次の表に示すスイッチ オプションのいずれかを使用して、基本コマンドを変更できます。
.dump オプション |
ダンプ ファイルへの影響 |
---|---|
/ma |
省略可能なすべての追加を含むミニダンプを作成します。 オプションは /ma と /mfFhut 同じです。 フル メモリ データ、ハンドル データ、アンロードされたモジュール情報、基本的なメモリ情報、スレッド時間情報をミニダンプに追加します。 |
/mf |
ミニダンプに完全メモリ データを追加します。 ターゲット アプリケーションが所有するすべてのアクセス可能なコミット済みページが含まれます。 |
/mF |
すべての基本的なメモリ情報をミニダンプに追加します。 このスイッチは、有効なメモリに関する情報だけでなく、すべての基本的なメモリ情報を含むストリームをミニダンプに追加します。 デバッガーは、 情報を使用して、ミニダンプのデバッグ時にプロセスの完全な仮想メモリ レイアウトを再構築します。 |
/mh |
ターゲット アプリケーションに関連付けられているハンドルに関するデータをミニダンプに追加します。 |
/mu |
アンロードされたモジュール情報をミニダンプに追加します。 このオプションは、Windows Server 2003 以降のバージョンの Windows でのみ使用できます。 |
/mt |
ミニダンプにスレッド情報を追加します。 スレッド情報にはスレッド時間が含まれます。これは、ミニダンプをデバッグするときに .ttime (スレッド時間の表示) を使用して表示できます。 |
/mi |
ミニダンプにセカンダリ メモリを追加します。 セカンダリ メモリ は、スタックまたはバッキング ストア上のポインターによって参照される任意のメモリに加えて、このアドレスを囲む小さな領域です。 |
/mp |
プロセス環境ブロックとスレッド環境ブロック データをミニダンプに追加します。 この情報は、アプリケーションのプロセスとスレッドに関する Windows システム情報にアクセスする必要がある場合に役立ちます。 |
/mw |
コミットされたすべての読み取り/書き込みプライベート ページをミニダンプに追加します。 |
/md |
実行可能イメージ内のすべての読み取り/書き込みデータ セグメントをミニダンプに追加します。 |
/mc |
イメージ内にコード セクションを追加します。 |
/mr |
スタックのミニダンプ部分から削除し、スタック トレースの再作成に使用されないメモリを格納します。 ローカル変数およびその他のデータ型の値も削除されます。 このオプションではミニダンプを小さくしません (未使用のメモリ セクションはゼロになります)、他のアプリケーションのプライバシーを保護する場合に便利です。 |
/mR |
ミニダンプから完全なモジュール パスを削除します。 モジュール 名 のみが含まれます。 このオプションは、ユーザーのディレクトリ構造のプライバシーを保護する場合に便利です。 |
これらのスイッチ オプションを組み合わせることができます。 たとえば、 コマンド .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 を使用して、複数の方法でユーザー モード ダンプ ファイルを作成できます。
- ダンプ ファイルを自動的に作成します。
- デバッグ時にダンプ ファイルを作成します。
- 既存のダンプ ファイルを圧縮します。
ツールの詳細については、「CDB を使用したWindows デバッグとデバッグを使用したはじめに」を参照してください。
ダンプ ファイルを自動的に作成する
アプリケーション エラーが発生すると、事後デバッグの設定に応じて、Windows がいくつかの方法のいずれかで応答する場合があります。 これらの設定でダンプ ファイルを作成するようにデバッグ ツールに指示すると、ユーザー モードのメモリ ダンプ ファイルが作成されます。 詳細については、「 事後デバッグを有効にする」を参照してください。
デバッグ時にダンプ ファイルを作成する
CDB または WinDbg がユーザー モード アプリケーションをデバッグしている場合は、 .dump (ダンプ ファイルの作成) コマンドを使用してダンプ ファイルを作成することもできます。
このコマンドを実行しても、ターゲット アプリケーションは終了しません。 特定のコマンド オプションを選択すると、必要な情報の量を正確に含むミニダンプ ファイルを作成できます。
既存のダンプ ファイルを圧縮する
CDB または WinDbg を使用して、ダンプ ファイルを圧縮できます。 ダンプ ファイルを圧縮するには、既存のダンプ ファイルのデバッグを開始します。 次に、 コマンドを .dump
使用して、より小さいサイズのダンプ ファイルを作成します。
タイム トラベル デバッグ
ユーザー モード アプリケーションをデバッグするもう 1 つのオプションは、タイム トラベル デバッグ (TTD) です。 TTD は、実行中にプロセスを記録するために使用できるツールです。 デバッガー セッションの記録を再生して、バグを見つけることができます。 記録のさまざまな部分に簡単に移動して、バグの原因となった条件と、問題を解決する方法を理解できます。
TTD にはクラッシュ ダンプ ファイルよりも大きな利点があります。多くの場合、エラーの原因となったコード実行が欠落しています。 コード実行で後方に移動する機能は、根本原因を特定するのに役立ちます。
詳細については、「 タイム トラベル デバッグの概要」を参照してください。
次のステップ
- ユーザー モード ダンプ ファイルを分析する方法について説明します。
- ダンプ ファイルから情報を抽出するためのヒントを取得します。