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

ここでは、以下の内容について説明します。

ダンプ ファイルの分析の詳細については、ダンプ ファイルの分析に関 するページUser-Mode参照してください

各種のUser-Mode ダンプ ファイル

ユーザー モードのクラッシュ ダンプ ファイルにはいくつかの種類がありますが、2 つのカテゴリに分かれています。

フル User-Mode ダンプ

ミニダンプ

これらのダンプ ファイルの違いは、サイズの 1 つです。 ミニdump は通常、よりコンパクトであり、アナリストに簡単に送信できます。

メモ ダンプ ファイルを分析することで、多くの情報を取得できます。 ただし、デバッガーで直接クラッシュを実際にデバッグするほど多くの情報を提供できるダンプ ファイルはありません。

フル User-Mode ダンプ

完全 なユーザー モード ダンプは 、基本的なユーザー モード ダンプ ファイルです。

このダンプ ファイルには、プロセスのメモリ領域全体、プログラムの実行可能イメージ自体、ハンドル テーブル、ダンプの発生時に使用していたメモリを再構築する際にデバッガーに役立つその他の情報が含まれます。

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

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

ユーザー モードでは、 .dump /m[MiniOptions] が最適な選択肢です。 このスイッチで作成されるダンプ ファイルのサイズは、非常に小さいファイルから非常に大きいサイズまでさまざまです。 適切な MiniOptions を指定することで、 含まれる情報を正確に制御できます。

ミニダンプ

プロセスに関連付けられたメモリの選択された部分のみを含むユーザー モード ダンプ ファイルは、ミニダンプと呼ばれる。

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

"ミニダンプ" という名前は誤解を招きます。最大のミニダンプ ファイルには、実際には "完全な" ユーザー モード ダンプよりも多くの情報が含まれているためです。 たとえば、 .dump /mf または.dump /ma は 、.dump /f よりも大きく、より完全な ファイルを作成します。 このため、 .dump /m[MiniOptions] は、すべてのユーザー モード ダンプ ファイルの作成に .dump /f より推奨されています。

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

.dump オプション ダンプ ファイルへの影響

/ma

省略可能なすべての追加を含むミニdump を作成します。 /ma オプション/mfFhut に相当します。これは、完全なメモリ データ、データの処理、アンロードされたモジュール情報、基本的なメモリ情報、およびスレッド時間情報をミニdump に追加します。

/mf

ミニdump に完全なメモリ データを追加します。 ターゲット アプリケーションによって所有されている、アクセス可能なコミット済みページはすべて含まれます。

/mF

すべての基本的なメモリ情報をミニdump に追加します。 これにより、有効なメモリに関する情報ではなく、すべての基本的なメモリ情報を含むミニdump にストリームが追加されます。 これにより、デバッガーは、ミニdump のデバッグ中にプロセスの完全な仮想メモリ レイアウトを再構築できます。

/mh

ターゲット アプリケーションに関連付けられているハンドルに関するデータをミニdump に追加します。

/mu

アンロードされたモジュール情報をミニdump に追加します。 これは、Windows Server 2003 以降のバージョンでのみ使用Windows。

/mt

ミニdump にスレッド情報を追加します。 これには、ミニdump のデバッグ時に .ttime ( スレッド時間の表示) を使用して表示できるスレッド時間が含まれます。

/mi

ミニ dump にセカンダリ メモリを追加します。 セカンダリ メモリは、スタックまたはバッキング ストア上のポインターによって参照されるメモリと、このアドレスを囲む小さな領域です。

/mp

プロセス環境ブロック (PEB) とスレッド環境ブロック (TEB) データをミニdump に追加します。 これは、アプリケーションのプロセスとスレッドに関するWindows情報にアクセスする必要がある場合に便利です。

/wb

コミット済みのすべての読み取り/書き込みプライベート ページをミニdump に追加します。

/md

実行可能イメージ内のすべての読み取り/書き込みデータ セグメントをミニdump に追加します。

/mc

イメージ内にコード セクションを追加します。

/mr

スタックのこれらの部分をミニdump から削除し、スタック トレースを再作成する場合に役立つメモリを格納します。 ローカル変数や他のデータ型の値も削除されます。 このオプションを使用すると、ミニdump は小さくされません (これらのメモリ セクションは単にゼロに設定されています)。ただし、他のアプリケーションのプライバシーを保護する場合に便利です。

/mR

ミニdump から完全なモジュール パスを削除します。 モジュール名 だけが 含まれます。 これは、ユーザーのディレクトリ構造のプライバシーを保護する場合に便利なオプションです。

/mk "FileName"

(Windows Vista のみ) ユーザー モード のミニダンプに加えて、カーネル モードのミニダンプを作成します。 カーネル モード のミニダンプは、ユーザー モード のミニダンプに格納されているのと同じスレッドに制限されます。 FileName は 引用符で囲む必要があります。

これらのオプションを組み合わせることができます。 たとえば、コマンド .dump /mfiu を使用して、かなり大きなミニダンプを作成できます。または、コマンド .dump /mrR を使用して、ユーザーのプライバシーを維持するミニダンプを作成できます。 構文の詳細については、「 .dump (ダンプ ファイルの作成)」を参照してください

新しいUser-Modeファイルの作成

ユーザー モード ダンプ ファイルの作成に使用できるツールには、CDB、WinDbg、Procdump など、さまざまなツールがあります。

ProcDump

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

Sysinternals ProcDump ユーティリティを使用してユーザー モード ダンプ ファイルを作成する方法については、「 ProcDump」を参照してください

CDB と WinDbg

CDB と WinDbg では、さまざまな方法でユーザー モードダンプ ファイルを作成できます。

ダンプ ファイルの自動作成

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

デバッグ中のダンプ ファイルの作成

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

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

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

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

Time Travel Debugging (TTD)

CDB、WinDbg、Procdump に加えて、ユーザー モード アプリケーションをデバッグするもう 1 つのオプションは、Time Travel Debugging (TTD) です。 Time Travel Debugging は、実行中のプロセスの実行を記録し、後で前方と後方の両方で再生できるツールです。 Time Travel Debugging (TTD) を使用すると、バグが見つからるまで問題を再現する必要が生じするのではなく、デバッガー セッションを "巻き戻す" と、問題を簡単にデバッグできます。

TTD を使用すると、バグにつながる条件をよりよく理解し、それを複数回再生して問題を解決する最善の方法を学習するために、時間を戻して理解することができます。

TTD は、クラッシュ ダンプ ファイルに対して利点を持つ可能性があります。多くの場合、最終的なエラーが発生したコードの実行が欠落しています。

Time Travel Debugging (TTD) の詳細については、「 Time Travel Debugging - Overview」を参照してください