【发布时间】:2011-10-18 03:51:56
【问题描述】:
我有一个应用程序有时会崩溃并创建下一个文件:(APP.exe.stackdump)
Exception: STATUS_ACCESS_VIOLATION at eip=6BA4B246
eax=67452301 ebx=EFCDAB89 ecx=98BADCFE edx=10325476 esi=FFFFFFFF edi=98BADCFE
ebp=FFFFFFFF esp=01A2C928 program=C:\APP.exe, pid 168, thread unknown (0x13E8)
cs=001B ds=0023 es=0023 fs=003B gs=0000 ss=0023
Stack trace:
Frame Function Args
End of stack trace
我在 Windows、Ubuntu 和 Centos 中使用 g++ 进行编译。错误有时只发生在一个线程内,无论如何都可以获取堆栈跟踪发生在哪里?或者任何额外的信息?
更新 1:
我可以用:
signal(SIGSEGV, sigHandler);
但我仍然没有堆栈跟踪信息。
【问题讨论】:
-
您正在 Windows、Ubuntu 和 Centos 中编译。您是全部 3 个错误还是只有 1 个错误?
-
我可能弄错了,但
esp看起来很合理。你看过那里吗?缺少堆栈跟踪仅意味着无法自动找到顶级返回值,但这只需要非常小的堆栈损坏(一个指针) -
似乎是堆栈损坏。如果用
-g编译,你能在gdb中重现它吗? -
@yi_H,我正在使用 -g 在调试模式下编译。我不知道如何找到错误在哪里,我需要调试信息,例如最后执行的函数的堆栈跟踪。 Vjo,这个错误有时会在 Centos 中发生,但我在 Windows XP 中看到的更多。
-
@yi_H 在 gdb 中有时会中断一个没有堆栈信息的未知信号,只有 asm 代码 (md5_block_asm_data_order+38: mov (%esi),%ebp)。
标签: c++ exception gcc stack stack-trace