【问题标题】:GDB shows no backtrace from application with debug symbolsGDB 没有显示来自带有调试符号的应用程序的回溯
【发布时间】: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


【解决方案1】:

您的/usr/lib/x86_64-linux-gnu/libstdc++.so.6 副本可能被不当剥离或以其他方式损坏。

这是一个测试程序:

#include <functional>

std::function<int()> foo;

void *thr(void *)
{
  foo();
}

int main()
{
  pthread_t tid;
  pthread_create(&tid, nullptr, thr, nullptr);
  pthread_join(tid, nullptr);
}

使用:g++ -g -std=c++11 t.cc 构建它,然后:

gdb -q ./a.out
Reading symbols from ./a.out...done.
(gdb) run
Starting program: /tmp/a.out
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
terminate called after throwing an instance of 'std::bad_function_call'
  what():  bad_function_call
[New Thread 0x7ffff6fd6700 (LWP 105567)]

Program received signal SIGABRT, Aborted.
[Switching to Thread 0x7ffff6fd6700 (LWP 105567)]
0x00007ffff7529cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56  ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0  0x00007ffff7529cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1  0x00007ffff752d0d8 in __GI_abort () at abort.c:89
#2  0x00007ffff7b36535 in __gnu_cxx::__verbose_terminate_handler () at ../../../../src/libstdc++-v3/libsupc++/vterminate.cc:95
#3  0x00007ffff7b346d6 in __cxxabiv1::__terminate (handler=<optimized out>) at ../../../../src/libstdc++-v3/libsupc++/eh_terminate.cc:38
#4  0x00007ffff7b34703 in std::terminate () at ../../../../src/libstdc++-v3/libsupc++/eh_terminate.cc:48
#5  0x00007ffff7b34922 in __cxxabiv1::__cxa_throw (obj=0x7ffff0000940, tinfo=0x7ffff7dc16e0 <typeinfo for std::bad_function_call>, dest=0x7ffff7b86960 <std::bad_function_call::~bad_function_call()>) at ../../../../src/libstdc++-v3/libsupc++/eh_throw.cc:87
#6  0x00007ffff7b868f2 in std::__throw_bad_function_call () at ../../../../../src/libstdc++-v3/src/c++11/functexcept.cc:113
#7  0x0000000000400917 in std::function<int ()>::operator()() const (this=0x601080 <foo>) at /usr/include/c++/4.8/functional:2470
#8  0x00000000004007d3 in thr () at t.cc:7
#9  0x00007ffff78c0182 in start_thread (arg=0x7ffff6fd6700) at pthread_create.c:312
#10 0x00007ffff75ed47d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

如果您没有得到相同的结果(我假设您不会),请尝试从 libstdc++6 软件包重新安装 libstdc++.so.6。安装libstdc++6-dbg 也可能有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多