Visual Studio デバッガーでのダンプ ファイル

"ダンプ ファイル" は、実行されていたプロセスと、ある時点でアプリに対して読み込まれたモジュールを示すスナップショットです。 ヒープ情報を含むダンプには、その時点でのアプリのメモリのスナップショットも含まれます。

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 デバッグを有効にすると、Visual Studio の外部でクラッシュしたプロセスに Visual Studio デバッガーをアタッチして、デバッガーからのダンプ ファイルを保存できます。 実行中のプロセスへのアタッチに関するページを参照してください。

ダンプ ファイルを保存するには:

  1. デバッグ中にエラーまたはブレークポイントで停止したときに、[デバッグ]>[名前を付けてダンプを保存] の順に選択します。

  2. [名前を付けてダンプを保存] ダイアログの [保存の種類] で、[ミニ ダンプ] または [ヒープ付きミニダンプ] (既定値) を選択します。

  3. パスを参照し、ダンプ ファイルの名前を選択してから、[保存] を選択します。

Note

Windows ミニダンプ形式をサポートする任意のプログラムでダンプ ファイルを作成できます。 たとえば、Windows SysinternalsProcdump コマンド ライン ユーティリティでは、トリガーまたは必要に応じてプロセスのクラッシュ ダンプ ファイルを作成できます。 その他のツールを使用したダンプ ファイルの作成については、「要件と制限」を参照してください。

ダンプ ファイルを開く

  1. Visual Studio で、[ファイル]>[開く]>[ファイル] の順に選択します。

  2. [ファイルを開く] ダイアログで、ダンプ ファイルを探して選択します。 通常は拡張子 .dmp が付いています。 [OK] を選択します。

    [ミニダンプ ファイルの概要] ウィンドウには、ダンプ ファイルについての概要およびモジュール情報、実行できる操作が表示されます。

    Screenshot showing Minidump summary page.

  3. [アクション] で次の操作を行います。

    • シンボルの読み込み場所を設定するには、[シンボル パスの設定] を選択します。
    • デバッグを開始するには、[Debug with Managed Only]\(マネージドのみでデバッグ\)[ネイティブのみでデバッグ][混合でデバッグ]、または [Debug with Managed Memory]\(マネージド メモリでデバッグ\) を選択します。

.exe、.pdb、およびソース ファイルを検索する

完全なデバッグ機能をダンプ ファイルで使用する場合、Visual Studio では次のものが必要です。

  • ダンプが作成された .exe ファイルと、ダンプ プロセスで使用されたその他のバイナリ (DLL など)。
  • .exe およびその他のバイナリのシンボル (.pdb) ファイル。
  • ダンプ作成時のファイルのバージョンとビルドに正確に一致する .exe および .pdb ファイル。
  • 関連モジュールのソース ファイル。 ソース ファイルを見つけることができない場合は、モジュールの逆アセンブルを使用できます。

ダンプにヒープ データが含まれる場合、Visual Studio では、一部のモジュールにバイナリ ファイルが欠落している状況にも対処できますが、有効な呼び出し履歴を生成できる十分なモジュールのバイナリが用意されている必要があります。

.exe ファイルの検索パス

Visual Studio では、ダンプ ファイルに含まれていない .exe ファイルが次の場所で自動的に検索されます。

  1. ダンプ ファイルが含まれたフォルダー。
  2. ダンプ ファイルで指定されているモジュール パス。これは、ダンプを収集したコンピューター上のモジュール パスです。
  3. [ツール] (または [デバッグ]) >[オプション]>[デバッグ]>[シンボル] で指定されたシンボル パス。 また、[ダンプ ファイルの概要] ウィンドウの [アクション] ペインから [シンボル] ページを開くこともできます。 このページで、検索する複数の場所を追加できます。

[バイナリが見つかりません]、[シンボルが見つかりません]、[ソースが見つかりません] の各ページを使用する

Visual Studio でダンプ内のモジュールをデバッグするために必要なファイルが見つからない場合は、[バイナリが見つかりません][シンボルが見つかりません]、または [ソースが見つかりません] ページが表示されます。 これらのページでは、問題の原因に関する詳細な情報が表示され、ファイルの検索に役立つアクション リンクも表示されます。 シンボル (.pdb) ファイルとソース ファイルの指定に関する記事をご覧ください。