MiniDumpWriteDump を介してアプリケーションの実行中に記録されたミニダンプがたくさんあります。ミニダンプは、開発マシンとは異なる OS バージョンのマシンで作成されました。
現在、dbghelp.dll を使用して、ミニダンプからスタック トレースを抽出するプログラムを作成しようとしています。MINIDUMP_MODULE_LIST を調べて SymLoadModule64 を呼び出していますが、パブリック シンボル サーバーから pdb (kernel32 など) をダウンロードできません。「C:\Windows\System32」をシンボル パスに追加すると、dll が検出され、シンボルがダウンロードされますが、もちろんミニダンプの dll と一致しないため、結果は役に立ちません。
では、適切な pdb をダウンロードして使用するように dbghelp.dll に指示するにはどうすればよいでしょうか。
[編集]
SymLoadModule64 はファイル名のみを取得し、バージョン/チェックサム情報を取得しないことを忘れていたため、明らかに SymLoadModule64 だけでは、dbghelp がどの pdb をダウンロードするかを判断できません。
この情報は、MINIDUMP_MODULE_LIST で実際に入手できますが、dbghelp API に戻す方法がわかりません。
追加のパラメーターを取る SymLoadModuleEx がありますが、それが必要なのか、追加のパラメーターに何を渡す必要があるのか わかりません。
[編集]
デバッグ用 SDK には dbghelp.dll と一緒に dbgeng.dll が配布されていることに気付きましたが、今のところうまくいきません。MSDN は十分に文書化されているようで、windbg が使用するエンジンと同じであると述べています。たぶん、それを使用してスタック トレースを抽出できます。
MSDN には個々のコンポーネントのみが記載されており、それらがどのように連携するかは記載されていないため、dbgeng.dll を使用してミニダンプを処理するための紹介を誰かに教えてもらえれば、おそらく役立つでしょう。