【发布时间】:2016-02-02 07:08:24
【问题描述】:
我用-g 和-O0 编译了我的可执行文件,当我用gdb 运行它并得到std::bad_function_call 时,由于某些原因,gdb 没有在我的应用程序中显示有关其来源的任何信息。顺便说一句,应用程序有两个线程,最可能的异常不是来自主线程。
回溯这么差的原因是什么?
terminate called after throwing an instance of 'std::bad_function_call'
what(): bad_function_call
[New Thread 0x7fffdd5dd700 (LWP 6955)]
[New Thread 0x7fffe6487700 (LWP 6953)]
Program received signal SIGABRT, Aborted.
[Switching to Thread 0x7fffdd5dd700 (LWP 6955)]
0x00007ffff3818267 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:55
55 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
#0 0x00007ffff3818267 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:55
#1 0x00007ffff3819eca in __GI_abort () at abort.c:89
#2 0x00007ffff412c06d in __gnu_cxx::__verbose_terminate_handler() ()
from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3 0x00007ffff4129ee6 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007ffff4129f31 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5 0x00007ffff4185ec1 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007ffff4e716aa in start_thread (arg=0x7fffdd5dd700) at pthread_create.c:333
#7 0x00007ffff38e9eed in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
(gdb) q
GCC 版本是 4.9.2
GDB 版本是 7.9
【问题讨论】:
-
可能是因为程序使用了 use
dwarf2,它不适用于您的环境,请尝试将-ggdb3添加到您的编译器标志中。 -
很遗憾,它并没有提高输出。
-
如果您提及您正在运行的 g++ 和 gdb 的版本会有所帮助。
-
好主意,我已将其添加到帖子中。
-
为抛出的 c++ 异常设置一个捕获点,或者更简单地在 bad_function_call 构造函数中设置一个断点。
标签: c++ linux multithreading gdb