Visual Studio 2005 でコンパイルしたプログラムでは再現できない、100% 再現可能なクラッシュが発生している顧客がいます。プログラムのデバッグ ビルドを送り、すべての PDB ファイルと DLL ファイルを手元に置いておきました。ミニダンプ ファイルが送られてきましたが、開くと次のようになります。
「MiniDump.dmp の 0x00000000 で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x00000000」。
次に、コール スタックに「0x00000000()」のみが表示され、逆アセンブリによって 0x0 のメモリのダンプが表示されます。シンボル サーバーをセットアップし、PDB シンボルをロードしました。しかし、多くの DLL のどれが実際に null へのジャンプを引き起こしたのかを知る方法がわかりません。これは多くの依存関係を持つ大規模なプロジェクトであり、サードパーティとして API を使用しているため、それらの一部はソースまたは PDB を持っていないバイナリです。
では、このミニダンプは一体どのように役立つのでしょうか? クラッシュの原因となった DLL を確認するにはどうすればよいですか? これまでデバッグにミニダンプを実際に使用したことはありませんが、私が読んだすべてのチュートリアルには、少なくとも関数名またはコール スタックの手がかりを与える何かが表示されているようです。nullを指す1行だけを取得します。
また、「依存」を使用して、未解決の DLL 依存関係があるかどうかを確認してみました。ただし、さまざまな Windows OS を搭載した 3 台のテスト マシンでは、OS DLL 依存関係の 3 つの異なるセットを取得しているようです (それでもクラッシュを再現できません)。したがって、これは問題を診断するための特に信頼できる方法ではないようです。
この問題の原因を特定するには、他にどのような方法がありますか? どの DLL が null にジャンプしたかを確認するために 1 つの命令を戻す方法はありますか?