【发布时间】:2010-09-19 18:46:41
【问题描述】:
我知道当应用程序崩溃时,系统会报告它在 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 指令在上面的程序集 sn-p 之前和之后。)
堆栈跟踪仅包括地址 mydll+0x4b79。它不提供任何来电者信息。
在 windbg 中加载故障转储未提供任何其他信息。
如何确定崩溃发生在哪个函数(或者更好的是,哪一行代码)中?
【问题讨论】: