Zar*_*rat 8 windows debugging minidump crash-dumps dbghelp
我有一大堆minidump,它们是在应用程序运行期间通过MiniDumpWriteDump记录的.minidump是在具有与我的开发机器不同的操作系统版本的机器上创建的.
现在我正在尝试编写一个程序,使用dbghelp.dll从minidump中提取堆栈跟踪.我正在走MINIDUMP_MODULE_LIST并调用SymLoadModule64,但是无法从公共符号服务器下载pdbs(kernel32等).如果我在符号路径中添加"C:\ Windows\System32",它会找到dll并下载符号,但当然它们与minidump中的dll不匹配,因此结果没用.
那么如何告诉dbghelp.dll下载并使用正确的pdbs?
[编辑]
我忘了声明SymLoadModule64只接受文件名而没有版本/校验和信息,所以很明显只有SymLoadModule64,dbghelp无法找出要下载的pdb.
这些信息实际上在MINIDUMP_MODULE_LIST中可用,但我不知道如何将其传递回dbghelp API.
有一个SymLoadModuleEx,它需要额外的参数,但我不知道这是我需要的,或者我应该传递给其他参数.
[编辑]
到目前为止没有运气,但我注意到在调试SDK中还有dbgng.dll与dbghelp.dll一起分发.MSDN看起来很好,并说它与windbg使用的引擎相同.也许我可以使用它来提取堆栈跟踪.
如果有人能指出我使用dbgeng.dll处理可能有用的minidumps的一些介绍,因为MSDN只记录单个组件,但不记录它们如何一起工作.
以防万一其他人想要自动从转储中提取堆栈跟踪,这是我最终做的事情:
就像我在更新中提到的那样,可以使用dbgeng.dll而不是dbghelp.dll,这似乎与WinDbg使用的引擎相同.经过一些试验和错误后,如何使用与WinDbg相同的符号加载机制获得良好的堆栈跟踪.
对WaitForEvent的调用似乎很重要,因为如果没有它,以下调用将无法提取堆栈跟踪.
还有一些内存似乎仍然存在漏洞,无法判断是不是我没有正确清理或dbgeng.dll内部的东西,但我可以每20次转储重启该过程,所以我没有调查更多.
| 归档时间: |
|
| 查看次数: |
4245 次 |
| 最近记录: |