この記事の趣旨
.NETFrameworkを使用したWindowsアプリケーションで発生した原因不明のエラー(CLR20r3)を追うのに、イベントビュアーの情報を頼りに、ildasmを活用して解決したよ、というお話
なのだけれども、コレが一筋縄では行かなかったので記録として残しておこう、というのが趣旨
参考記事
イベントビュアーのログとildasmの基本的な使い方は、とても素敵な記事があるのでそちらを参照して欲しい
.NETプログラム例外落ちイベント(CLR20r3)を読み取る - DD開発ROOM
ildasmの使い方とか、ログのどこを見れば良いかは大体この記事を参考にした
今回のお題
発生元
MyApp1
要約
動作が停止しました
日付
2019/01/01 00:00
状態
報告されていません
説明
障害が発生しているアプリケーションのパス: C:\***\MyApp1.exe
問題の署名
問題イベント名: CLR20r3
問題の署名 01: MyApp1.exe
問題の署名 02: 1.0.0.0
問題の署名 03: 5c99dc4b
問題の署名 04: mscorlib
問題の署名 05: 4.7.3260.0
問題の署名 06: 5bb7bcb6
問題の署名 07: 3d05
問題の署名 08: 8
問題の署名 09: System.ObjectDisposedException
OS バージョン: 10.0.17134.2.0.0.256.161
ロケール ID: 1041
追加情報 1: 2f26
追加情報 2: 2f26b8a453c9e4c8bc3727ee4d01ee95
追加情報 3: 8359
追加情報 4: 835918b60be548152332a262dd9aeb1d
問題の説明に役立つファイル
WERInternalMetadata.xml
どこで引っかかったか?
MyApp1.exeの中を見て「問題の署名07」にある”3d05”がない!
と(心の中で)騒いでいたわけなのだ
結局
・mscorlib.dllをildasmで覗いて、問題が起きているメソッドを発見
・対象のクラスのコードが公開されていたのでだいたい原因を把握
・対象のクラスの使い方を見直して修正完了!
となった
まとめ
イベントビュアーの情報から、実際にildasmで逆アセンブルするのは「問題の署名04」に出ているexeなりdllを対象としなければいけない
「上から順番に、情報を解決していく」ということが大切
当たり前といえば当たり前のことだが...