レジストリ設定
※Windowsをアップデートすると消えることがあるっぽい。その場合は再設定する。
レジストリエディタを起動し、以下のレジストリを選択
「コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting
」
- キーに
LocalDumps
が無ければ追加 -
LocalDumps
に以下の値を追加
名前「DumpFolder
」、種類「展開可能な文字列
」、値「C:\wer_dumps
」(出力先)
名前「DumpCount
」、種類「DWORD(32ビット値)
」、値「3
」(出力先のダンプファイル保持数)
名前「DumpType
」、種類「DWORD(32ビット値)
」、値「2
」(0:カスタム、1:ミニ、2:フル、※2だとファイルサイズ大きいので1でも良い?)
その他ダンプ解析のための準備
必要なソフト
「WinDbg
」をMicrosoft Storeから取得
VC++アプリビルド設定(VC++アプリ開発中の場合)
ダンプ解析対象のアプリのビルド時に解析用のファイル群を出力させる設定
「プロジェクト」-「プロパティ」-「構成のプロパティ」
から以下を設定
「リンカー」-「デバッグ」-「マップファイルの作成」
を「はい
」
「C/C++」-「出力ファイル」-「アセンブリの出力」
を「アセンブリ コード、コンピューター語コード、ソース コード (/FAcs)
」
解析
※出力されたmapファイル内の「Preferred load address is 00400000」をWindbgのTraceアドレスに足す。
例:0x123456 + 00400000 == 0x00523456
出力されたアセンブリコード上から00523456がありそうな場所(00523456なら0x523000など)をテキスト検索してみる。
~?HogeHoge@FugaFuga@@AAA@Z 00523400 f aaa.obj
~?HogeHoge2@FugaFuga2@@BBB@ZZ 00523700 f bbb.obj
ならaaa.objのHogeHogeだとわかる。
aaa.objのHogeHogeのアドレスは0x00523400からなので、obj内のアドレスは0x00523456-0x00523400 == 56
aaa.objのHogeHogeの0x56バイト目を出力されたアセンブリから探す。