我有一大堆 minidump,它们是在应用程序运行时通过 MiniDumpWriteDump 记录的。小型转储是在与我的开发机器具有不同操作系统版本的机器上创建的。
现在我正在尝试编写一个程序,使用 dbghelp.dll 从小型转储中提取堆栈跟踪。我正在走 MINIDUMP_MODULE_LIST 并调用 SymLoadModule64,但这无法从公共符号服务器下载 pdb(kernel32 等)。如果我将“C:\Windows\System32”添加到符号路径,它会找到 dll 并下载符号,但它们当然与 minidump 中的 dll 不匹配,因此结果毫无用处。
那么如何告诉 dbghelp.dll 下载并使用正确的 pdb?
[编辑]
我忘了说 SymLoadModule64 只接受一个文件名,没有版本/校验和信息,所以显然单独使用 SymLoadModule64 dbghelp 不可能确定要下载哪个 pdb。
该信息实际上在 MINIDUMP_MODULE_LIST 中可用,但我不知道如何将其传递回 dbghelp API。
有 SymLoadModuleEx 需要额外的参数,但我不知道这是否是我需要的或者我应该为额外的参数传递什么。
[编辑]
到目前为止没有运气,尽管我注意到调试 SDK 中还有 dbgeng.dll 与 dbghelp.dll 一起分发。MSDN 看起来有据可查,并说它与 windbg 使用的引擎相同。也许我可以用它来提取堆栈跟踪。
如果有人可以向我指出一些使用 dbgeng.dll 处理小型转储的介绍,这可能也会有所帮助,因为 MSDN 仅记录了各个组件,但没有记录它们如何协同工作。