ダンプ ファイルは、実行中のプロセスと、ある時点でアプリに読み込まれたモジュールを示すスナップショットです。 ヒープ情報を含むダンプには、その時点でのアプリのメモリのスナップショットも含まれます。
Visual Studio でヒープを使用してダンプ ファイルを開く方法は、デバッグ セッションのブレークポイントで停止するようなものです。 実行を続行することはできませんが、ダンプ時にアプリのスタック、スレッド、変数の値を調べることができます。
ダンプは主に、開発者がアクセスできないマシンからの問題をデバッグするために使用されます。 お客様のコンピューターでクラッシュまたは応答しないプログラムを再現できない場合は、顧客のコンピューターからダンプ ファイルを使用できます。 テスト担当者は、クラッシュまたは応答しないプログラム データを保存して、より多くのテストに使用するダンプも作成します。
Visual Studio デバッガーでは、マネージド コードまたはネイティブ コードのダンプ ファイルを保存できます。 Visual Studio または ミニダンプ 形式でファイルを保存する他のアプリによって作成されたダンプ ファイルをデバッグできます。
要件と制限
- 64 ビット コンピューターからダンプ ファイルをデバッグするには、Visual Studio が 64 ビット コンピューターで実行されている必要があります。
- Visual Studio では、Linux OS からマネージド アプリのダンプ ファイルをデバッグできます。
- Visual Studio では、ARM デバイスからネイティブ アプリのダンプ ファイルをデバッグできます。 また、ARM デバイスからマネージド アプリのダンプをデバッグすることもできますが、ネイティブ デバッガーでのみデバッグできます。
- カーネル モードのダンプ ファイルをデバッグしたり、Visual Studio で SOS.dll デバッグ拡張機能を使用したりするには、Windows Driver Kit (WDK) で Windows 用のデバッグ ツールをダウンロードします。
- Visual Studio では、以前の 完全なユーザー モード のダンプ形式で保存されたダンプ ファイルをデバッグできません。 フル ユーザーモード ダンプはヒープ付きダンプとは異なります。
- 最適化されたコードのダンプ ファイルをデバッグすると、混乱を招く可能性があります。 たとえば、関数のコンパイラインライン化によって予期しない呼び出し履歴が発生する可能性があり、その他の最適化によって変数の有効期間が変更される可能性があります。
ヒープ情報あり/なしのダンプ ファイル
ダンプ ファイルには、ヒープ情報が含まれている場合もあれば、そうでない場合もあります。
ヒープ付きダンプ ファイル には、ダンプ時におけるアプリのメモリのスナップショット (変数の値を含む) が格納されます。 Visual Studio では、読み込まれたネイティブ モジュールのバイナリもヒープ付きのダンプ ファイルに保存されるため、デバッグがはるかに簡単になります。 Visual Studio では、アプリ バイナリが見つからない場合でも、ヒープを含むダンプ ファイルからシンボルを読み込むことができます。
ヒープのないダンプ ファイル はヒープを含むダンプよりもはるかに小さくなりますが、デバッガーはシンボル情報を検索するためにアプリ バイナリを読み込む必要があります。 読み込まれたバイナリは、ダンプの作成時に実行されているバイナリと完全に一致する必要があります。 ヒープのないダンプ ファイルでは、スタック変数の値のみが保存されます。
ダンプ ファイルを作成する
Visual Studio でプロセスをデバッグしているときに、デバッガーが例外またはブレークポイントで停止したときにダンプ ファイルを保存できます。
Just-In-Time Debugging を有効にすると、Visual Studio デバッガーを Visual Studio の外部でクラッシュしたプロセスにアタッチし、デバッガーからダンプ ファイルを保存できます。 実行中のプロセスへのアタッチを参照してください。
ダンプ ファイルを保存するには:
デバッグ中にエラーまたはブレークポイントで停止したときに、[デバッグ]>[名前を付けてダンプを保存] の順に選択します。
[名前を付けてダンプを保存] ダイアログの [種類] で、[ミニダンプ] または [ヒープ付きミニダンプ] (既定値) を選択します。
パスを参照してダンプ ファイルの名前を選択し、[ 保存] を選択します。
注
Windows ミニダンプ形式をサポートする任意のプログラムでダンプ ファイルを作成できます。 たとえば、Windows Sysinternals の Procdump コマンド ライン ユーティリティでは、トリガーまたはオンデマンドに基づいてプロセス クラッシュ ダンプ ファイルを作成できます。 他のツールを使用してダンプ ファイルを作成する方法については、 要件と制限事項 を参照してください。
ダンプ ファイルを開く
Visual Studio で、[>開く>File] を選択します。
[ ファイルを開く ] ダイアログで、ダンプ ファイルを見つけて選択します。 通常、 .dmp 拡張子が付きます。 [OK] を選択.
[ミニダンプ ファイルの概要] ウィンドウには、ダンプ ファイルの概要とモジュールの情報と、実行できるアクションが表示されます。
[ アクション] の下:
- シンボルの読み込み場所を設定するには、[ シンボル パスの設定] を選択します。
- デバッグを開始するには、[ マネージドのみのデバッグ]、[ 混合でデバッグ]、[ ネイティブのみでデバッグ] の順に選択します。
- マネージド メモリを分析するには、[ マネージド メモリのデバッグ ] を選択し、 マネージド 型レポートを参照してください。
- ダンプでメモリ アナライザーを実行するには、[ 診断分析の実行 ] を選択し、「 .NET Diagnostic Analyzers を使用してマネージド メモリ ダンプをデバッグする」を参照してください。
.exe、.pdb、およびソース ファイルを検索する
ダンプ ファイルで完全なデバッグ機能を使用するには、Visual Studio で以下が必要です。
- ダンプが作成された .exe ファイルと、ダンプ プロセスで使用された他のバイナリ (DLL など)。
- シンボル (.pdb) ファイルは、.exe およびその他のバイナリ用です。
- ダンプ作成時のファイルのバージョンとビルドと完全に一致する .exe ファイルと .pdb ファイル。
- 関連するモジュールのソース ファイル。 ソース ファイルが見つからない場合は、モジュールの逆アセンブリを使用できます。
ダンプにヒープ データがある場合、Visual Studio は一部のモジュールで不足しているバイナリに対処できますが、有効な呼び出し履歴を生成するのに十分なモジュール用のバイナリが必要です。
.exe ファイルの検索パス
Visual Studio では、ダンプ ファイルに含まれていない .exe ファイルの場所が自動的に検索されます。
- ダンプ ファイルを含むフォルダー。
- ダンプ ファイルが指定するモジュール パス。これは、ダンプを収集したマシン上のモジュール パスです。
- ツール (またはデバッグ) >Options>Debugging>Symbols で指定されたシンボル パス。 [ダンプ ファイルの概要] ウィンドウの [操作] パネルから [シンボル] ページを開くこともできます。 このページでは、検索する場所をさらに追加できます。
[バイナリなし]、[シンボルなし]、または [ソースが見つかりません] ページを使用する
Visual Studio で、ダンプ内のモジュールをデバッグするために必要なファイルが見つからない場合は、[ バイナリが見つかりません]、[ シンボルが見つかりません]、または [ ソースが見つかりません ] ページが表示されます。 これらのページでは、問題の原因に関する詳細情報を提供し、ファイルを見つけるのに役立つアクション リンクを提供します。 「シンボル (.pdb) ファイルとソース ファイルを指定する」を参照してください。