回溯从零开始时如何调试崩溃

时间:2018-11-04 20:25:48

标签: c++ debugging coredump

我的长期运行的应用程序因分段错误而随机崩溃。尝试调试生成的coredump时,我陷入了奇怪的stacktrace:

(gdb) bt full
#0 __memmove_ssse3 () at ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S:2582
No locals.
#1 0x00000000 in ?? ()
No symbol table info available.

回溯开始于0x00000000怎么可能?
我该怎么做才能进一步调试此问题?我无法在gdb中运行它,因为崩溃可能要花一个星期的时间。

1 个答案:

答案 0 :(得分:2)

通常,这意味着堆栈上的返回地址已被0覆盖,这可能是由于溢出了堆栈上数组的末尾。您可以尝试在gcc或clang上使用address sanitizer进行构建(如果正在使用它们)。或者,您可以尝试使用valgrind运行,看看它是否会告诉您有关无效内存写入的信息。