LoginSignup
1
2

[VisualStudio/ダンプ] WER(WindowsErrorReporting)を使ったダンプ採取と解析

Last updated at Posted at 2021-03-09

ダンプ関連記事

やりたいこと

何かの原因でアプリがおちてしまう、クラッシュしてしまうという現象が起きた時に、その原因を調べたい。
特に、自分のPCでVisualStudioでデバッグ実行して、落ちた部分でbreakさせて調査をしたいが、自分のPCでは起きてくれず、リモートデバッグも出来ない状況というときに、なんとかして手がかりを得たい。

別解

以前、下記の記事でProcDumpというツールを使ってダンプファイルを作るということをした。

ProcDumpを使ったダンプファイルの作成と解析
https://qiita.com/tera1707/items/26b7d19e7ae1b4978f9f

ProcDumpでもダンプ採取はできるが、そちらとの違いは、下記かなと思う。

  • ProcDumpの方が、アプリがクラッシュしていなくても、アプリ内部で指定の例外が起きているだけでもダンプを取れる(WER(今回のやり方)だと、クラッシュしないとダンプ取れない)
  • WERの方が、専用のexe等を持ってこなくてもよいので、簡単に準備、ダンプ採取できる。(ProcDumpはツールをダウンロードして対象のPCにもっていかないといけない)

USBメモリ等を使ってexeファイルを入れることができないような環境でテストや評価をしているときで、アプリがクラッシュしてしまう場合は、レジストリの設定を行うだけでダンプ採取できるWERの方がやりやすいかもしれない。

やり方

下記のレジストリの設定を行う。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps

キー名 概要
DumpFolder ダンプファイルの出力先フォルダを指定する。
DumpCount 出力先フォルダに残すダンプファイルの数を指定する。
例えば2にすれば、3つ目のダンプが出来た時には最初の1つ目を自動で消して、残るファイルを2つにしてくれる
DumpType 0:カスタムダンプ
1:ミニダンプ
2:フルダンプ
CustomDumpFlags DumpTypeに0(カスタムダンプ)を指定したときに、どういうダンプにするか指定できる。
※個人的には大きなダンプファイルが保存できないなどの制約がなければ、DumpTypeは2(FullDump)にしてデバッグしやすいようにすべきではと思う(のでこの値は設定しない)

例)C:\dumpsにダンプを最大2つまでのフルダンプのファイルを保存しようとした場合
image.png

上記レジストリの設定をした状態で対象のアプリがクラッシュすると、DumpFolderで指定したフォルダにダンプファイルが出来上がる。そのダンプファイルをVisualStudioで開くなどして、クラッシュ時の解析を行う。

regファイルで簡単レジストリ登録

下記の内容で、regファイルを作成すれば、簡単にWERの設定ができる。(win11で確認)

ダンプ5ファイル、フルダンプを採取の場合は下記。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps]
"DumpCount"=dword:00000005
"DumpFolder"="C:\\dumps"
"DumpType"=dword:00000002

このテキストを「WER.reg」などの名前で保存して、対象のPC上で管理者で実行すれば、WERの設定をポンと行うことができる。

参考:.regファイルでレジストリキーと値をポンと登録する

実験

ダンプファイルの採取実験

以前作った、クラッシュするプログラムを使って実験する。
https://qiita.com/tera1707/items/26b7d19e7ae1b4978f9f#%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0

上記コードでクラッシュさせると、dmpファイルが指定のフォルダに出来上がる。
image.png

解析

上で出来たダンプファイルを、VisualStudio2019で開く。
以降の操作は、以前の記事のやり方(ProcDumpで採取したダンプの解析)と同じでOK。
https://qiita.com/tera1707/items/26b7d19e7ae1b4978f9f#visualstudio2019%E3%81%A7%E3%83%80%E3%83%B3%E3%83%97%E3%81%AE%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%82%92%E8%A1%8C%E3%81%86

ミニダンプとフルダンプの違い

こちらにメモした。
https://qiita.com/tera1707/items/e64fad902e51122852e9

参考

MS公式 WERを使ったダンプの採取方法
https://docs.microsoft.com/en-us/windows/win32/wer/collecting-user-mode-dumps

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2