クラッシュダンプ収集入門【WER/ProcDump/WinDbg】
まず結論
クラッシュダンプ収集は、次の順番で考えるのが分かりやすいです。
- まず WER LocalDumps をアプリ単位で設定する(追加ツール不要)
- 必要なら ProcDump を足す(再現率の低い現場調査、hang、first chance exception 向け)
- さらに制御したいなら 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
確認ポイント
- 想定のフォルダに
.dmpが出るか - サイズが運用想定に合うか
- WinDbg で開けるか
- 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、自分のコードがスタックに見えるか、例外スレッド以外に怪しい待ちがないかを確認する。
運用で先に決めておくこと
- PDB とバイナリをどう残すか: 配布した EXE/DLL の正確な版と対応する PDB を保管。これがないとダンプは読めない
- 出力先と保持数: システムドライブ直下に置かない。専用フォルダに分離し、上限を切る
- 誰が見てよいか: フルダンプには機密情報(接続文字列、トークン、業務データ)が混ざる可能性がある
よくあるはまりどころ
- ダンプは取れたが PDB がない → 収集設定と同時に PDB 保管設計も入れる
DumpFolderの ACL を確認していない → プロセスが本当に書けるか先に確認- フルダンプを本番機のシステムドライブに出し続ける → 容量事故の定番
- WER だけで hang も見ようとする → hang や first chance は ProcDump のほうが向いている
-e 1を常時入れて例外の嵐になる → 件数制限や短時間だけの使用が現実的
まとめ
クラッシュダンプは、再現率の低い障害に対して強力な観測点。おすすめの順番は WER → ProcDump → MiniDumpWriteDump。ダンプと同じくらい PDB の保管が重要。
参考資料
- Microsoft Learn: ユーザーモード ダンプの収集 - Win32 apps
- Microsoft Learn: ProcDump v11.1 - Sysinternals
- Microsoft Learn: MiniDumpWriteDump function (minidumpapiset.h) - Win32
- Microsoft Learn: User-mode dump files - Windows drivers
- Microsoft Learn: ユーザー モード ダンプ ファイルの分析 - Windows drivers
- Microsoft Learn: Windows デバッガーをインストールする - Windows drivers
- Microsoft Learn: Symbol path for Windows debuggers - Windows drivers
- Microsoft Learn: !analyze (WinDbg) - Windows drivers
- Microsoft Learn: Troubleshoot processes by using Task Manager - Windows Server
- Microsoft Learn: Enabling Postmortem Debugging - Windows drivers
関連する記事
同じタグを共有する最新の記事です。さらに近い話題で知識を深められます。
Windowsアプリのクラッシュ時ログ出力方法
Windows アプリが想定外例外で落ちても原因を追えるよう、通常ログ、最終クラッシュマーカー、WER LocalDumps、watchdog をどう組み合わせて証跡を残すかを設計の考え方とフレームワーク別の注意点まで含めて整理します。
Application Verifier で作る異常系テスト基盤
Application Verifier の役割と、Handles・Heaps・Low Resource Simulation・!htrace を組み合わせた Windows ネイティブアプリ向け異常系テスト基盤の組み立て方を、harness 設計と合格条件まで具体的に整理...
長期稼働クラッシュの原因調査:ハンドルリーク編
24/7で動く産業用カメラ制御アプリが1か月後に突然クラッシュする原因をハンドルリーク観点で解説し、Handle Countの傾き計測、異常系を短ループで回す再現法、open/closeを追える構造化ログ設計までをまとめた前編記事です。
TCP再送による産業用カメラ通信停止の原因特定
TCP 通信が産業用カメラとの間で数秒止まる現象を、パケットロスと RTO 待ちの観点で切り分け、Wireshark の確認手順と RFC1323 タイムスタンプの効き方まで具体的に整理した記事です。
Windowsで「Windows によって PC が保護されました」が出る理由
Windowsアプリ配布時にSmartScreen警告が出る理由を、コード署名、EV/OV証明書、Azure Artifact Signing、MSIX、Microsoft Store、ClickOnce、社内配布、App Controlまで実務目線で整理します。
関連トピック
このテーマと近いトピックページです。記事を起点に、関連するサービスや他の記事へ進めます。
Windows技術トピック
Windows 開発、不具合調査、既存資産活用の技術トピックをまとめた入口です。
不具合調査 / 長期稼働テーマ
再現しにくい不具合、通信停止、長期稼働障害、失敗パス検証を整理するトピックです。
このテーマがつながるサービス
この記事は次のサービスページにつながります。近い入口からご覧ください。
Windowsアプリ開発
業務アプリ、装置連携、通信ツールなどの Windows ソフト開発を支援します。
不具合調査・原因解析
再現しにくい障害、長期稼働後の不具合、通信停止などの調査を支援します。