クラッシュダンプ収集入門【WER/ProcDump/WinDbg】

· · Windows開発, 不具合調査, クラッシュダンプ, WER, ProcDump, WinDbg

まず結論

クラッシュダンプ収集は、次の順番で考えるのが分かりやすいです。

  1. まず WER LocalDumps をアプリ単位で設定する(追加ツール不要)
  2. 必要なら ProcDump を足す(再現率の低い現場調査、hang、first chance exception 向け)
  3. さらに制御したいなら MiniDumpWriteDump で自前収集
環境 まずの構成
開発機/検証機 WER LocalDumps(DumpType=2 フルダンプ)
顧客環境/現場機 容量と機密要件を見て DumpType=1 か 2
長時間運転や hang 調査 WER + ProcDump の -h や -e 1
独自 UI や添付ログも含めたい MiniDumpWriteDump で自前収集

クラッシュダンプで分かること

  • どの例外コードで落ちたか
  • どのスレッドが落ちたか
  • その時点のコールスタック
  • 読み込まれていたモジュール
  • ヒープ上の状態やオブジェクトの中身(含めた場合)

ダンプだけで完結しようとせず、ログや heartbeat と組み合わせるのが基本。

収集方法の全体像

方法 向いている場面 強み 注意点
WER LocalDumps まず常設したいクラッシュ収集 Windows 標準、アプリ単位で設定可 基本はクラッシュ向け。hang は弱い
ProcDump 再現率低い調査、hang、first chance トリガーが多い、現場投入しやすい 外部ツール運用
タスクマネージャー 手動で今の状態を取りたい GUI ですぐ取れる 自動収集ではない
MiniDumpWriteDump 自前の診断機能 添付ログや独自メタデータを合わせやすい 実装ミスに注意

WER LocalDumps の設定

レジストリ設定

アプリ単位のサブキーで設定するのが扱いやすい。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MyApp.exe
意味 おすすめ
DumpFolder ダンプ出力先 専用フォルダを切る
DumpCount 保持数 5〜10
DumpType 0=カスタム、1=ミニ、2=フル 最初は 2、容量が厳しければ 1

設定例

reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MyApp.exe" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MyApp.exe" /v DumpFolder /t REG_EXPAND_SZ /d "C:\CrashDumps\MyApp" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MyApp.exe" /v DumpCount /t REG_DWORD /d 10 /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MyApp.exe" /v DumpType /t REG_DWORD /d 2 /f

確認ポイント

  1. 想定のフォルダに .dmp が出るか
  2. サイズが運用想定に合うか
  3. WinDbg で開けるか
  4. Event Viewer の Application ログで crash が見えるか

ProcDump の使い方

よく使うオプション

オプション 意味
-ma フルダンプ
-mp MiniPlus ダンプ
-e 未処理例外でダンプ
-e 1 first chance 例外でもダンプ
-h ハング時にダンプ
-w 対象プロセスの起動待ち
-x 対象プロセスを起動して監視
-n 最大ダンプ数
-accepteula EULA 自動承諾

代表的なコマンド例

# 既に起動中のプロセスを未処理例外でフルダンプ
procdump -accepteula -ma -e 1234 C:\CrashDumps\MyApp

# 次回起動を待って監視
procdump -accepteula -ma -e -w MyApp.exe C:\CrashDumps\MyApp

# first chance exception も取りたい
procdump -accepteula -ma -n 3 -e 1 MyApp.exe C:\CrashDumps\MyApp

# ハングを取りたい
procdump -accepteula -h MyApp.exe C:\CrashDumps\MyApp

ミニダンプ vs フルダンプ

種類 向いている場面 良い点 注意点
ミニダンプ まず広く入れたい、共有を軽く 小さい、転送しやすい 状態復元の深さは弱い
フルダンプ 原因調査を優先、native 境界やヒープが怪しい 情報が多い サイズ大、機密混入リスク
MiniPlus/Custom ミニでは足りずフルは重い バランスを取れる 調整の知識が必要

おすすめ: 開発機/検証機ではフルダンプ、顧客環境ではミニかフルを運用条件で選ぶ。

ダンプ取得後の解析手順

WinDbg のインストール

winget install Microsoft.WinDbg

ダンプを開く

windbg -z C:\CrashDumps\MyApp\MyApp_YYMMDD_HHMMSS.dmp

シンボル設定

.symfix C:\Symbols\Microsoft
.sympath+ C:\Symbols\MyApp
.reload

自動解析

!analyze -v

その後、例外コード、faulting module、自分のコードがスタックに見えるか、例外スレッド以外に怪しい待ちがないかを確認する。

運用で先に決めておくこと

  1. PDB とバイナリをどう残すか: 配布した EXE/DLL の正確な版と対応する PDB を保管。これがないとダンプは読めない
  2. 出力先と保持数: システムドライブ直下に置かない。専用フォルダに分離し、上限を切る
  3. 誰が見てよいか: フルダンプには機密情報(接続文字列、トークン、業務データ)が混ざる可能性がある

よくあるはまりどころ

  • ダンプは取れたが PDB がない → 収集設定と同時に PDB 保管設計も入れる
  • DumpFolder の ACL を確認していない → プロセスが本当に書けるか先に確認
  • フルダンプを本番機のシステムドライブに出し続ける → 容量事故の定番
  • WER だけで hang も見ようとする → hang や first chance は ProcDump のほうが向いている
  • -e 1 を常時入れて例外の嵐になる → 件数制限や短時間だけの使用が現実的

まとめ

クラッシュダンプは、再現率の低い障害に対して強力な観測点。おすすめの順番は WER → ProcDump → MiniDumpWriteDump。ダンプと同じくらい PDB の保管が重要。

参考資料

関連する記事

同じタグを共有する最新の記事です。さらに近い話題で知識を深められます。

Windowsアプリのクラッシュ時ログ出力方法

Windows アプリが想定外例外で落ちても原因を追えるよう、通常ログ、最終クラッシュマーカー、WER LocalDumps、watchdog をどう組み合わせて証跡を残すかを設計の考え方とフレームワーク別の注意点まで含めて整理します。

記事を読む

関連トピック

このテーマと近いトピックページです。記事を起点に、関連するサービスや他の記事へ進めます。

このテーマがつながるサービス

この記事は次のサービスページにつながります。近い入口からご覧ください。

ブログ一覧に戻る