我有一个应用程序有时会崩溃并创建下一个文件:(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);
但我仍然没有stacktrace信息。
答案 0 :(得分:1)
为什么堆栈跟踪不可用有几种可能性:
从EBP = FFFFFFFF的事实来看,除非问题存在于接触EBP的低级别C或汇编程序代码中,否则我会选择#2。你能从转储中提供反汇编吗?
答案 1 :(得分:1)
或任何额外信息?
使用valgrind或efence。两者都非常擅长在取消引用时使用野生指针,而不是在使用损坏的数据时使用。