C++ GDB提供无用的回溯';当使用堆芯转储时

C++ GDB提供无用的回溯';当使用堆芯转储时,c++,gdb,g++,C++,Gdb,G++,大约一周前,我开始在使用GDB从核心转储获取一个像样的回溯时遇到困难。如果我在GDB中加载程序并使其崩溃,我可以得到回溯罚款 这是我从核心转储中执行此操作时得到的结果: (gdb) bt #0 0x00007fd10ad42425 in ?? () #1 0x00007fd10ad45b8b in ?? () #2 0x0000000000000004 in ?? () #3 0x0000000000000005 in ?? () #4 0x00007ffff770887e in ??

大约一周前,我开始在使用GDB从核心转储获取一个像样的回溯时遇到困难。如果我在GDB中加载程序并使其崩溃,我可以得到回溯罚款

这是我从核心转储中执行此操作时得到的结果:

(gdb) bt
#0  0x00007fd10ad42425 in ?? ()
#1  0x00007fd10ad45b8b in ?? ()
#2  0x0000000000000004 in ?? ()
#3  0x0000000000000005 in ?? ()
#4  0x00007ffff770887e in ?? ()
#5  0x0000000000000009 in ?? ()
#6  0x00007fd10ae87ea7 in ?? ()
#7  0x0000000000000003 in ?? ()
#8  0x00007ffff77072ba in ?? ()
#9  0x0000000000000006 in ?? ()
#10 0x00007fd10ae87eab in ?? ()
#11 0x0000000000000002 in ?? ()
#12 0x00007ffff77072ce in ?? ()
#13 0x0000000000000002 in ?? ()
#14 0x00007fd10ae85b82 in ?? ()
#15 0x0000000000000001 in ?? ()
#16 0x00007fd10ae87ea7 in ?? ()
#17 0x0000000000000003 in ?? ()
#18 0x00007ffff77072b4 in ?? ()
#19 0x000000000000000c in ?? ()
#20 0x00007fd10ae87eab in ?? ()
#21 0x0000000000000002 in ?? ()
#22 0x0000000000000020 in ?? ()
#23 0x0000000000000000 in ?? ()
(gdb) 
无论是SIGSEGV、SIGABRT(未处理的异常或断言/验证),都会发生这种情况

我使用以下编译器标志进行编译:

g++-Wall-Wextra-g-ggdb-std=gnu++0x-rdynamic-pthread-O0


我真的想不出有什么变化会导致这种情况。有什么想法吗?

结果表明,尽管有“核心转储”消息,但如果存在旧的现有核心文件,它不会被覆盖。这显然是一个ubuntu错误,根据这个:


那么,为什么您仍然能够在gdb(无核心转储)中获得回溯?损坏的堆栈不应该导致同样的问题吗?gdb命令行是什么?很明显,你给它的是正确的可执行文件吗…?该死。我才意识到问题出在哪里。旧的核心文件未被覆盖。我只是假设核心文件是当前的。如果您想区分核心文件之间的差异,下面可能很方便:/sbin/sysctl-w“kernel.core\u pattern=core.%e.%p”。这将命名核心文件,如“core.my_program.12345”。%e是可执行文件名,%p进程ID.nice,这可能会防止将来的混淆;)JvO:很好,只是为了进一步即兴创作有没有办法添加时间戳?@Kamath是的,只需在模式中添加“%t”(与“%e”或“%p”相同)。