崩溃后获取 DLL 地址的函数
我知道当应用程序崩溃时,系统会报告它在 mydll.dll 中的 0x00004b79 位置崩溃。我有源代码,也有二进制文件,但我没有 PDB 或该 DLL 构建中的任何列表文件。
崩溃是可重复的,但我无法在生产计算机上安装调试器,并且在开发或调试环境中不会发生崩溃。我已经设置了 Dr. Watson,并且有故障转储和 Dr. Watson 日志文件。
Dr. Watson 日志文件包含正在执行的函数的反汇编代码:
10604b70 8b442408 mov eax,[esp+0x8]
10604b74 8b542404 mov edx,[esp+0x4]
10604b78 50 push eax
FAULT ->10604b79 8b4120 mov eax,[ecx+0x20] ds:0023:00000020=????????
10604b7c 52 push edx
10604b7d 6801800000 push 0x8001
10604b82 50 push eax
10604b83 ff156c946210 call dword ptr [mydll!DllUnregisterServer+0x1720c (1062946c)]
10604b89 c20800 ret 0x8
(INT 3 指令位于上述汇编代码片段之前和之后。)
堆栈跟踪仅包含地址 mydll+0x4b79。它不提供任何呼叫者信息。
在 Windbg 中加载故障转储没有提供任何附加信息。
我如何确定崩溃发生在哪个函数(或者更好的是哪一行代码)中?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
创建应用程序的故障转储并使用调试器对其进行检查,WinDbg 是这里显而易见的选择。故障转储将为您提供堆栈跟踪和详细的错误信息。
编辑:至于无法安装调试器,DrWatson 是预安装的,并且能够生成故障转储,然后可以在不同的计算机上进行检查。
Create a crash dump of your application and exmaine it using a debugger, WinDbg is the obvious choice here. A crash dump will give you a stack trace and detailed error information.
Edit: As for not being able to install a debugger, DrWatson is preinstalled and able to generate crash dumps which can then be examined on a different machine.