3

我有一个软件应用程序,一些用户报告在某些情况下可靠地崩溃。我无法在我拥有的任何机器上重现它,所以我对如何解决它感到很困惑。

一位用户向我发布了发生崩溃的装配线,如下所示:

00505e58 1000 adc [eax],al
00505e5a cc int 3
00505e5b cc int 3
00505e5c cc int 3
00505e5d cc int 3
00505e5e cc int 3
00505e5f cc int 3
00505e60 55 push ebp
00505e61 8bec mov ebp,esp
00505e63 83ec1c sub esp,0x1c
FAULT -> 00505e66 ff4f08 dec dword ptr [edi+0x8] ds:0023:00000008=????????
00505e69 53 push ebx
00505e6a 56 push esi
00505e6b 0f85b0000000 jne Construct2+0x105f21 (00505f21)
00505e71 8d9894010000 lea ebx,[eax+0x194]
00505e77 8d45f0 lea eax,[ebp-0x10]
00505e7a 8bcb mov ecx,ebx
00505e7c e8ef4ff1ff call Construct2+0x1ae70 (0041ae70)
00505e81 8d45e4 lea eax,[ebp-0x1c]
00505e84 8bcb mov ecx,ebx
00505e86 e88580fdff call Construct2+0xddf10 (004ddf10)

我正在使用 Visual Studio 2010,并为我提供给用户的构建提供了 .pdbs。是否可以将此汇编跟踪转换为错误代码行?

4

1 回答 1

2

如果您可以在应用程序崩溃时获得应用程序的完整崩溃转储,那么您可以在 windbg 或 Visual Studio 中调出 dmp 并使用源代码进行调试相当容易。网上有很多信息可用于获取转储和调试。例如,如果您有一个转储和匹配的 pdb 并在 windbg 中启动 thsi,您只需执行一个“.lines”并查看发生这种情况的确切位置。

如果您没有转储,那么执行此操作的一种方法是在本地运行您的应用程序并查看此地址的代码。看起来您的应用程序(我假设它是 Construct2.exe)从 0x0040000 的基地址开始,而您在 EDI 为 0 的 0x00505E66 处崩溃。因此,如果您切换到反汇编视图,请转到此地址(或设置一个 bp)然后查看源代码,你就可以开始了。

于 2011-02-16T02:27:33.360 回答