更新履歴(4件・最終更新 2026年08月02日)
この記事に加えた変更の記録です。アーカイブした更新前のバージョンは、DOI付きの固定URLから読めます。
- 記事の冒頭に「この記事の知識マップ」節を追加しました。本文で扱っている概念とその関係を、要約・図・詳細ページへのリンクにまとめたものです。本文の主張は変えていません。
- 外部レビュー(1283件)への対応として本文を更新しました。個々の変更内容は、この下の履歴を参照してください。
- 用語ミニ辞書と、わざと落とすための最小コードを追加しました(LocalDumpsのサブキー名が落とすEXE名と一致していないとダンプが出ない罠を含みます)。MiniPlusとCustomの実際の指定方法(CLRプロセスは`-mp`でもフルになる制約つき)、ダンプのファイル名がProcDumpの既定形式であることの明示、`icacls`での確認と付与を追加しました。
- 参考リンクなどで縦棒(パイプ)記号を含む行が表として表示され、リンクが押せなくなっていた表示崩れを修正しました。本文の内容は変えていません。
- 初版公開
この記事を引用する(DOI: 10.5281/zenodo.21589670)
この記事はZenodoにアーカイブされています。常に最新版へ解決されるDOIと、いま表示している版に固定されたDOIの両方を下に示します。
小村 豪(2026)「Windowsクラッシュダンプ収集入門 - WER/ProcDump/WinDbg」合同会社小村ソフト. https://doi.org/10.5281/zenodo.21589670 https://staging.comcomponent.com/blog/2026/03/16/008-windows-app-crash-dump-collection-introduction/
- DOI(最新版)
- 10.5281/zenodo.21589670
- DOI(この版)
- 10.5281/zenodo.21732696
Windows アプリで「たまにだけ落ちる」が始まると、ログだけでは追い切れない場面がかなりあります。
特につらいのは、こういうケースです。
- 顧客環境でしか起きない
- 例外メッセージは取れているが、呼び出し元の文脈が足りない
- C# / .NET の managed 側だけでなく、COM、P/Invoke、native DLL、vendor SDK が絡む
- 長時間運転後にだけ落ちる
こういうときに効くのがクラッシュダンプです。クラッシュ時点のプロセス状態をファイルに落としておけば、例外コード、落ちたスレッドのスタック、読み込まれていたモジュール、メモリの一部または全部を後から読めます。
Windows では、まず WER の LocalDumps、必要に応じて Sysinternals ProcDump、さらに制御したくなったら MiniDumpWriteDump を使う、という順で考えるのが分かりやすいです。この記事では、Windows デスクトップアプリ、常駐アプリ、Windows サービス、装置連携ツールなどを前提に、クラッシュダンプ収集の最初の一歩を整理します。
この記事で繰り返し出てくる用語
先に、短く固めておきます。ここが曖昧なままだと、あとの章がぼやけます。
| 用語 | 意味 |
|---|---|
| PDB | ビルド時に生成されるデバッグ情報ファイル。アドレスを関数名や行番号へ戻すための対応表です |
| シンボル | アドレスと名前の対応情報のこと。PDB やシンボルサーバーから供給されます。これがないとコールスタックがアドレスの羅列になります |
| first chance exception | 例外が発生した直後、まだアプリの例外ハンドラーが処理する前の段階。アプリが catch すれば、そのまま処理は続きます |
| second chance exception | アプリが処理しきれず、未処理例外としてプロセスが終了に向かう段階。ふつう「落ちた」と言うのはこちらです |
| postmortem debugger | クラッシュ時に OS が自動的に起動するデバッガー。マシン全体のクラッシュ時挙動として登録します |
| ミニダンプ / フルダンプ | ダンプに含めるメモリ量の違い。7 章で扱います |
1. まず結論
最初に押さえたい点だけを先に並べます。
- まずは WER LocalDumps をアプリ単位で設定する のが無難です。追加ツールなしで、クラッシュ後にローカルへダンプを残せます。
- 再現率の低い現場調査や、first chance exception / hang まで見たいなら ProcDump を使います。
- 自前収集は最後に考える くらいでちょうどよいです。必要になってから
MiniDumpWriteDumpを検討すれば十分です。 - ダンプと同じくらい大事なのが PDB と配布バイナリの保管です。ダンプだけあっても、シンボルがなければ読める量がかなり減ります。
- フルダンプは強いが、サイズと機密情報の混入リスクも強いです。保管場所、保持数、アクセス権、共有手順を先に決めます。
入門段階のおすすめ構成は、だいたいこのあたりに落ち着きます。
| 環境 | まずの構成 |
|---|---|
| 開発機 / 検証機 | WER LocalDumps をアプリ単位で設定し、まずは DumpType=2 のフルダンプ |
| 顧客環境 / 現場機 | 容量と機密要件を見て DumpType=1 か 2 を選ぶ。必要時だけ ProcDump を追加 |
| 長時間運転や hang 調査 | WER に加えて ProcDump の -h や -e 1 を検討 |
| 独自 UI や添付ログも含めたい | 別プロセス前提で MiniDumpWriteDump を使う自前収集 |
要するに、最初は WER、次に ProcDump、最後に自前です。ここを逆順で始めると、だいたい設計が重くなります。
この記事の知識マップ
Windowsアプリのクラッシュダンプ収集は、追加ツールなしでアプリ単位に設定できるWER LocalDumpsをまず入れ、hangやfirst chance exceptionまで見たい場合や既に起動中のプロセスを監視したい場合にProcDumpを足し、独自の診断機能が必要になったときだけMiniDumpWriteDumpによる自前収集を検討するという順で考えるのが安全である。ダンプの種類はミニダンプとフルダンプで採れる情報の深さとサイズがトレードオフになり、.NETのCLRプロセスはProcDumpのMiniPlus指定でもフルダンプ相当のサイズになる。保存先フォルダの書き込み権限を確認しないと収集自体が空振りになり、取得したダンプはPDBと組み合わせてWinDbgで解析して初めて読める情報になる。
flowchart LR
accTitle: Windowsクラッシュダンプ収集(WER/ProcDump/WinDbg)の知識マップ
accDescr: WER LocalDumpsとProcDumpとMiniDumpWriteDumpがこの順で検討すべきクラッシュダンプの収集手段であり、ダンプの種類の選択、保存先ACLの確認、PDBを伴うWinDbgでの解析までが一続きの流れであることを示す図
wer_localdumps["WER LocalDumps"]
procdump["ProcDump"]
windbg["WinDbg"]
minidumpwritedump["MiniDumpWriteDump"]
crash_dump["クラッシュダンプ"]
minidump["ミニダンプ"]
fulldump["フルダンプ"]
miniplus_dump["MiniPlusダンプ"]
native_boundary_crash_investigation["ネイティブ境界の原因調査"]
dump_folder_acl["ダンプ保存先フォルダのACL"]
first_chance_exception["first chance exception"]
second_chance_exception["second chance exception"]
hang_detection["ハング検出"]
postmortem_debugger["Postmortem debugger"]
pdb["PDB(プログラムデータベース)"]
custom_diagnostic_report["独自の診断情報保存機能"]
notmyfault["NotMyFault"]
wer_localdumps -->|"より先に行うべき"| procdump
procdump -->|"より先に行うべき"| minidumpwritedump
wer_localdumps -->|"実装を担う"| crash_dump
procdump -->|"実装を担う"| crash_dump
wer_localdumps -.->|"利用する"| minidump
wer_localdumps -.->|"利用する"| fulldump
procdump -.->|"利用する"| fulldump
procdump -.->|"利用する"| miniplus_dump
fulldump -->|"推奨される対応"| native_boundary_crash_investigation
minidump -->|"用いるのは非推奨"| native_boundary_crash_investigation
wer_localdumps -.->|"前提とする"| dump_folder_acl
procdump -.->|"利用する"| first_chance_exception
procdump -.->|"利用する"| second_chance_exception
procdump -.->|"利用する"| hang_detection
wer_localdumps -->|"用いるのは非推奨"| hang_detection
procdump -.->|"実装を担う"| postmortem_debugger
wer_localdumps -->|"より先に行うべき"| postmortem_debugger
crash_dump -.->|"前提とする"| pdb
crash_dump -->|"で確認できる"| windbg
minidumpwritedump -->|"推奨される対応"| custom_diagnostic_report
notmyfault -->|"用いるのは非推奨"| wer_localdumps
図の実線は常に成り立つ関係、破線は条件付きの関係です(成立条件は詳細ページの各関係の説明に記載)。関係すべての一覧(全21件、根拠・確度つき)と主要概念の定義は知識マップ詳細ページにまとめています。データ: JSON-LD / Turtle
2. クラッシュダンプで何が分かるか
クラッシュダンプは、「その瞬間のスナップショット」です。防犯カメラというより、事故現場の静止画に近いです。
そのため、こういう情報はかなり取りやすいです。
- どの例外コードで落ちたか
- どのスレッドが落ちたか
- その時点のコールスタック
- 読み込まれていたモジュール
- どの程度のメモリを含めたかに応じて、ヒープ上の状態やオブジェクトの中身
一方で、ダンプだけでは不足しやすいものもあります。
- そこへ至るまでの時系列
- 数時間前からの増加傾向
- 通信や装置との外部状態
- 直前の入力や業務文脈
なので実務では、ダンプだけで完結しようとせず、ログや heartbeat と組み合わせるのが基本です。
3. 収集方法の全体像
Windows アプリのダンプ収集で、入門段階で押さえたい方法は次の 4 つです。
| 方法 | 向いている場面 | 強み | 注意点 |
|---|---|---|---|
| WER LocalDumps | まず常設したいクラッシュ収集 | Windows 標準。アプリ単位で設定しやすい | 基本はクラッシュ向け。hang や細かい条件分岐は弱い |
| ProcDump | 再現率が低い調査、hang、first chance exception | トリガーが多い。現場投入しやすい | 外部ツール運用になる |
| タスク マネージャーのダンプ作成 | 手動で今の状態を取りたい | GUI でその場で取れる | 自動収集ではない |
MiniDumpWriteDump |
自前の診断機能を作りたい | 添付ログや独自メタデータを合わせやすい | 実装を雑にすると逆に壊れる |
初心者にとって一番大事なのは、「何で取るか」より先に、「どの条件で」「どこへ」「どのサイズで」取るかを決めることです。
4. 最初のおすすめは WER LocalDumps
4.1 まず見るレジストリ値
Windows Error Reporting (WER) には、クラッシュ後にローカルへユーザーモードダンプを保存する LocalDumps があります。追加ツールを配らなくてよいので、まずの一手としてかなり扱いやすいです。
基本のキーはここです。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
ここにグローバル設定を置くこともできますが、実務では アプリ単位のサブキーに寄せる方が扱いやすいです。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MyApp.exe
最初に見る値は 3 つです。
| 値 | 意味 | まずのおすすめ |
|---|---|---|
DumpFolder |
ダンプの出力先 | 専用フォルダを切る |
DumpCount |
保持数 | 5〜10 くらいから |
DumpType |
0=カスタム、1=ミニ、2=フル | 最初は 2、容量が厳しければ 1 |
4.2 アプリ単位で設定する例
たとえば MyApp.exe について、C:\CrashDumps\MyApp にフルダンプを最大 10 個残したいなら、まずは次のように設定できます。
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
この例のポイントは 4 つあります。
- グローバルではなく
MyApp.exeに限定している - 出力先を専用フォルダに分離している
- まずはフルダンプにしている
- 保持数を 10 に制限している
4.3 取れたか確認する
設定を入れたら、本番で自然発生を待つ前に 検証環境で必ず 1 回は取り切る方が安全です。
確認したいのはこの 4 点です。
- 想定のフォルダに
.dmpが出るか - サイズが運用想定に合うか
- WinDbg で開けるか
- Event Viewer の Application ログで crash が見えているか
4.4 わざと落とすための最小コード
「取り切る」と言われても、本物のクラッシュを待っていては検証になりません。検証用に、意図的に落ちるだけの小さな EXE を用意しておくと早いです。
.NET なら、未処理例外を投げるだけのコンソールアプリで十分です。.NET のマネージド未処理例外はプロセスを終了させるので、そのまま WER の対象になります。
// CrashTest.csproj: <TargetFramework>net8.0</TargetFramework>
using System;
using System.Threading;
internal static class Program
{
private static void Main()
{
Console.WriteLine($"PID={Environment.ProcessId} / 3 秒後に落とします。");
Thread.Sleep(3000);
throw new InvalidOperationException("intentional crash for dump collection test");
}
}
ネイティブ側の確認をしたいなら、アクセス違反 (0xC0000005) を起こす方が近いです。最適化で消えないように volatile を付けます。
// crash_test.cpp / C++17 / MSVC
int main()
{
volatile int* p = nullptr;
*p = 1; // ここで STATUS_ACCESS_VIOLATION が発生します
return 0;
}
ここで一つだけ、外しやすい点があります。
LocalDumps のサブキー名は、いま落とす EXE のファイル名と一致していないといけません。 MyApp.exe のキーだけ作って CrashTest.exe を落としても、当然ダンプは出ません。検証時は、CrashTest.exe のキーを一時的に作るか、グローバル設定側で試すかのどちらかにします。
Sysinternals の NotMyFault も「わざと落とす」ためのツールとしてよく挙がりますが、これは Windows システム自体を crash / hang させて ブルースクリーンのダンプを作るためのもので、管理者権限も必要です。ユーザーモードアプリの LocalDumps 検証には、上のような自前の小さな EXE のほうが安全で確実です。
5. ProcDump を使う場面
WER で十分なことは多いですが、ProcDump が便利な場面もあります。
- レジストリ常設を避けたい
- 既に起動中のプロセスだけ監視したい
- 次回起動からだけ監視したい
- first chance exception を見たい
- hang を取りたい
- パフォーマンスカウンタや条件付きで採りたい
5.1 よく使うオプション
入門段階でよく使うものだけに絞ると、ProcDump は次を覚えておけばかなり戦えます。
| オプション | 意味 |
|---|---|
-ma |
フルダンプ |
-mp |
MiniPlus ダンプ |
-mc <Mask> |
カスタムダンプ。MINIDUMP_TYPE のビットマスクを 16 進で指定 |
-e |
未処理例外でダンプ |
-e 1 |
first chance / second chance 例外でダンプ |
-h |
ハングしたウィンドウでダンプ |
-w |
対象プロセスの起動待ち |
-x |
対象プロセスを起動して監視 |
-n |
最大ダンプ数 |
-accepteula |
初回 EULA 確認を自動承諾 |
5.2 代表的なコマンド例
既に起動中のプロセスを、未処理例外でフルダンプ
procdump -accepteula -ma -e 1234 C:\CrashDumps\MyApp
次回起動を待って、未処理例外でフルダンプ
procdump -accepteula -ma -e -w MyApp.exe C:\CrashDumps\MyApp
自分で起動して、そのまま監視
procdump -accepteula -ma -e -x C:\CrashDumps\MyApp MyApp.exe
first chance exception も取りたい
procdump -accepteula -ma -n 3 -e 1 MyApp.exe C:\CrashDumps\MyApp
ハングを取りたい
procdump -accepteula -h MyApp.exe C:\CrashDumps\MyApp
5.3 -i を最初の一手にしない理由
ProcDump には -i で postmortem debugger として登録する使い方もあります。これは強力ですが、マシン全体のクラッシュ時挙動に踏み込むので、入門段階の最初の一手には少し重いです。
なので、最初は WER のアプリ単位設定か、ProcDump の -w / -x / PID 指定から入るのが扱いやすいです。
6. 自前収集で MiniDumpWriteDump を使うときの考え方
自前収集が向いているのは、たとえばこんな場面です。
- UI から「診断情報を保存」ボタンを出したい
- ダンプと一緒にログ、設定、トレース ID を束ねたい
- 関連する子プロセスや補助プロセスもまとめたい
- アップロード前に独自のマスキングや圧縮を入れたい
ここで中心になる API が MiniDumpWriteDump です。
ただし、ここは少し癖があります。入門で特に外したくないのは次の 2 点です。
- 可能なら dump 対象とは別プロセスから呼ぶ
- DbgHelp 系は single-threaded 前提で扱う
7. ミニダンプ / フルダンプ / 中間サイズの選び方
ここで迷う人はかなり多いです。実務での選び方を表にしておきます。
| 種類 | 向いている場面 | 良い点 | 注意点 |
|---|---|---|---|
| ミニダンプ | まず広く入れたい、共有を軽くしたい | 小さい、転送しやすい | 状態復元の深さは弱い |
| フルダンプ | 原因調査を優先したい、native 境界やヒープが怪しい | 取れる情報が多い | サイズが大きい、機密混入リスクが高い |
| MiniPlus / Custom | ミニでは足りず、フルは重い | バランスを取れる | 調整の知識が必要 |
初心者向けのおすすめはかなり単純です。
- 開発機 / 検証機ではフルダンプ
- 顧客環境ではミニかフルを運用条件で選ぶ
- メモリ破壊、ネイティブ DLL、COM、P/Invoke、長時間稼働後の状態異常が怪しいならフル寄り
7.1 MiniPlus / Custom は、実際にはどう指定するのか
表の 3 行目だけ、指定方法が少し分かりにくいので補足します。
WER LocalDumps の場合は、DumpType を 0(カスタム)にしたうえで、CustomDumpFlags に MINIDUMP_TYPE のビット組み合わせを入れます。CustomDumpFlags は DumpType=0 のときだけ使われる値で、既定は 0x00000121(MiniDumpWithDataSegs MiniDumpWithUnloadedModules MiniDumpWithProcessThreadData の組み合わせ)です。
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MyApp.exe" /v DumpType /t REG_DWORD /d 0 /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MyApp.exe" /v CustomDumpFlags /t REG_DWORD /d 0x121 /f
ProcDump の場合は、-mp が MiniPlus、-mc <Mask> がカスタムです。
procdump -accepteula -mp -e MyApp.exe C:\CrashDumps\MyApp
MiniPlus は、名前のわりに中身がかなりフル寄りです。ドキュメントによると、private メモリ全部と、read/write な image / mapped メモリ全部を含み、そのうえで 512MB を超える最大の private 領域だけを除外してサイズを抑えます。結果として「フルダンプ並みに詳しいが、サイズはフルの 10%〜75%」という位置付けになります。
ただし注意点が 2 つあります。
- CLR プロセスはデバッグ上の制約から、
-mpを指定してもフル (-ma) として採取されます。 .NET アプリで MiniPlus のサイズ削減を当て込むのは、たいてい外れます - サイズを詰めたい動機が「機密情報の混入を減らしたい」なのであれば、MiniPlus ではなくミニダンプ側で考えるほうが素直です
8. 運用で先に決めておくこと
ダンプ収集は、実装より運用で転ぶことがかなりあります。先に決めておきたいことを挙げます。
8.1 PDB とバイナリをどう残すか
これが最重要です。
- 配布した EXE / DLL の正確な版
- その版に対応する PDB
- どのコミット / どのビルドパイプラインで作ったか
- インストーラや配布物の版情報
8.2 どこへ出して、何個残すか
フルダンプはかなり大きくなります。出力先と保持の方針は最初から決めておく方が安全です。
- システムドライブ直下に置きっぱなしにしない
- 専用フォルダへ分離する
DumpCountや-nで上限を切る- 長期保管と一次保管を分ける
8.3 誰が見てよいか
フルダンプには、機密情報や個人情報が混ざる可能性があります。
- 平文設定
- 接続文字列
- トークンや資格情報
- 直前に扱っていた業務データ
- ファイルパスやユーザー名
なので、「取る」設計と同時に「誰が触れてよいか」も決める必要があります。
9. 取れた後の最短解析導線
ダンプを取ったあと、最初にやることは意外と素朴です。
9.1 WinDbg を入れる
今の WinDbg は Microsoft Store か winget で入れやすくなっています。
winget install Microsoft.WinDbg
9.2 ダンプを開く
windbg -z C:\CrashDumps\MyApp\MyApp_YYMMDD_HHMMSS.dmp
ここのファイル名は、ProcDump が付ける既定の名前です。ProcDump の既定ファイル名は PROCESSNAME_YYMMDD_HHMMSS.dmp で、PROCESSNAME / PID / EXCEPTIONCODE / YYMMDD / HHMMSS を置換指定子として使えます。
一方、WER LocalDumps は ProcDump とは別の命名でファイルを作ります。命名規則は Microsoft Learn に明記されていないので、名前を推測して探すより、出力先フォルダを更新日時順に見るほうが確実です。
dir /o-d "C:\CrashDumps\MyApp\*.dmp"
DumpFolder を設定していない場合、既定の出力先は %LOCALAPPDATA%\CrashDumps です。ただし サービスのクラッシュは実行アカウントごとのプロファイルフォルダへ出ます。System サービスなら %WINDIR%\System32\Config\SystemProfile、Network Service / Local Service なら %WINDIR%\ServiceProfiles 配下です。「ダンプが出ていない」と思ったら、まずここを疑います。
9.3 シンボルを設定する
まず Microsoft 公開シンボルを使える状態にして、その後で自分の PDB の場所を足します。
.symfix C:\Symbols\Microsoft
.sympath+ C:\Symbols\MyApp
.reload
9.4 まずは自動解析を見る
!analyze -v
そのうえで、
- どの例外コードか
- faulting module は何か
- 自分のコードがどこまでスタックに見えているか
- 例外スレッド以外に怪しい待ちや詰まりがないか
を順に見ます。
10. よくあるはまりどころ
10.1 ダンプは取れたが、PDB がない
これはかなり多いです。ダンプ収集は成功していても、読む材料が不足します。 収集設定と同じタイミングで、PDB の保管設計も入れる方がよいです。
10.2 DumpFolder の ACL を見ていない
サービスや権限分離されたプロセスでは、ここで空振りしやすいです。 「そのプロセスが本当に書けるか」を先に確認します。Microsoft Learn も、既定以外のパスを使うなら「クラッシュしたプロセスが書き込める ACL になっていること」を確認するように書いています。
今の ACL は icacls で見られます。
icacls C:\CrashDumps\MyApp
書き込み権が足りなければ、実行アカウントに M(変更)を足します。ダンプフォルダは配下のファイルにも同じ権限が要るので、(OI) と (CI) を付けて継承させます。
rem 例: Network Service で動くサービスの場合
icacls C:\CrashDumps\MyApp /grant "NT AUTHORITY\NETWORK SERVICE:(OI)(CI)M"
(OI) は配下のファイルへ、(CI) は配下のフォルダへ ACE を継承させる指定です。継承の範囲がそのまま「誰がダンプを読めるか」になるので、8.3 で決めた方針と食い違っていないか、付ける前に一度確認してください。
10.3 フルダンプを本番機のシステムドライブへ出し続ける
これは容量事故の定番です。 保持数制限と出力先分離は最初から入れます。
10.4 WER だけで hang も全部見ようとする
WER LocalDumps はまず crash に強いです。 hang や first chance exception は ProcDump の方が向いている場面があります。
10.5 -e 1 を常時入れて、例外の嵐になる
first chance exception は便利ですが、ふつうに多いです。 件数制限を付ける、短時間だけ入れる、対象を限定するのが現実的です。
11. まとめ
クラッシュダンプは、再現率の低い障害に対してかなり強い観測点です。特に Windows アプリで COM、P/Invoke、native DLL、長時間運転が絡むなら、最初から「落ちたら何が残るか」を決めておく価値があります。
おすすめの順番はシンプルです。
- まず WER LocalDumps をアプリ単位で入れる
- 必要なら ProcDump を足す
- さらに制御したくなったら、別プロセス前提で
MiniDumpWriteDumpを使う
この順で進めると、大きく外しにくいです。
12. 参考資料
- ユーザーモード ダンプの収集 - 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 | Microsoft Learn
- MINIDUMP_TYPE enumeration (minidumpapiset.h) - Win32 | Microsoft Learn
- icacls - Windows commands | Microsoft Learn
- NotMyFault - Sysinternals | Microsoft Learn
関連する記事
同じタグを共有する最新の記事です。さらに近い話題で知識を深められます。
Windowsアプリのクラッシュ時にログとダンプを残す設計
Windows アプリが想定外例外やプログラムミスで落ちても、あとから原因を追える証跡を残すために、通常ログ、最終クラッシュマーカー、WER LocalDumps、監視プロセスをどう組み合わせるべきかを整理します。
WinDbg + SOSでクラッシュダンプを読む ── 収集した後の実務解析入門
WindowsクラッシュダンプをWinDbgとSOS拡張で読む手順を解説します。シンボルパスの設定、!clrstackや!dumpheapによる例外とメモリリークの追い方、!analyze -v、dotnet-dump analyzeとの使い分けまで整理します。
障害対応は復旧で終わらない ── 小さな開発チームのためのポストモーテム(再発防止)の型
障害を「直して謝って終わり」にすると同じ障害を繰り返します。blameless postmortemを小規模チーム向けに翻訳し、1時間で書けるテンプレート、再発防止策の強度判断表、実施のトリアージまでをまとめます。
スリープ・休止・Modern Standbyと長時間稼働アプリ ── 「夜中に止まっていた」を設計で防ぐ
長時間動き続けるWindowsアプリが「朝見たら止まっていた」となる原因を、S3スリープ/休止/Modern Standbyの違いから整理します。スリープ中のタイマーやTCP接続の挙動、SetThreadExecutionStateによる抑止まで解説します。
ソースコードも仕様書もないシステムを引き継いだら ── 止めずに運用・保守するための実務手順
ソースコードも仕様書もない業務システムの運用・保守を始める実務手順を整理します。動いている環境の保全とバックアップ、実行ファイル・DBの棚卸し、挙動からの仕様復元、延命・ラップ・再構築の判断まで解説します。
関連トピック
このテーマと近いトピックページです。記事を起点に、関連するサービスや他の記事へ進めます。
Windows技術トピック
Windows 開発、不具合調査、既存資産活用の技術トピックをまとめた入口です。
不具合調査 / 長期稼働テーマ
再現しにくい不具合、通信停止、長期稼働障害、失敗パス検証を整理するトピックです。
このテーマがつながるサービス
この記事は次のサービスページにつながります。近い入口からご覧ください。
不具合調査・原因解析
クラッシュダンプ、ログ、再現条件を組み合わせて切り分ける流れは、不具合調査・原因解析と相性のよいテーマです。特に現場でしか起きないクラッシュや長時間運転後の障害では観測設計そのものが重要になります。
技術相談・設計レビュー
本番で何を採取するか、ダンプとログをどう設計へ織り込むか、権限や保管方針まで含めて整理したい場合は、技術相談・設計レビューとして進めやすいです。
よくある質問
この記事のテーマについて、相談時によくある質問をまとめています。
- クラッシュダンプとは何ですか?何が分かりますか?
- クラッシュした瞬間のプロセス状態をファイルに保存したもので、事故現場の静止画のようなスナップショットです。例外コード、落ちたスレッドとそのコールスタック、読み込まれていたモジュール、含めたメモリ量に応じてヒープ上のオブジェクトの中身まで後から確認できます。一方で、そこへ至るまでの時系列や通信・装置との外部状態は不足しやすいため、実務ではログや heartbeat と組み合わせて使うのが基本です。
- WER の LocalDumps はどこで設定しますか?
- レジストリの HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps 配下で設定します。実務ではグローバル設定ではなく、MyApp.exe のようなアプリ単位のサブキーに寄せる方が扱いやすいです。最初に見る値は出力先の DumpFolder、保持数の DumpCount、種類の DumpType の3つで、追加ツールを配布せずにクラッシュ後のダンプをローカルへ残せます。
- ミニダンプとフルダンプはどちらを選ぶべきですか?
- 開発機・検証機ではフルダンプ(DumpType=2)、顧客環境では容量と機密要件を見てミニダンプ(DumpType=1)かフルダンプを選ぶのが目安です。メモリ破壊、ネイティブ DLL、COM、P/Invoke、長時間稼働後の状態異常が怪しい場合はフル寄りが有利です。ただしフルダンプはサイズが大きく、接続文字列やトークンなどの機密情報が混入するリスクもあるため、保管場所・保持数・アクセス権を先に決めておく必要があります。
- ProcDump はどんなときに使いますか?
- WER LocalDumps は基本的にクラッシュ向けなので、hang や first chance exception まで見たい場合、レジストリへの常設を避けたい場合、既に起動中のプロセスだけを監視したい場合に ProcDump が向いています。代表的なオプションは、フルダンプの -ma、未処理例外での採取 -e、ハング検出の -h、起動待ちの -w などです。first chance exception を対象にする -e 1 は件数が多くなりやすいため、-n で上限を付けるなど短時間・限定的に使うのが現実的です。