简体   繁体   中英

GDB shows no backtrace from application with debug symbols

I compiled my executable with -g and -O0 and when I run it with gdb and get std::bad_function_call for some reasons gdb does not show any information about its origin in my application. Btw, application has two threads, and most probable exception is coming not from the main thread.

What could be the reason of such a poor backtrace?

  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 version is 4.9.2

GDB version is 7.9

It's possible that your copy of /usr/lib/x86_64-linux-gnu/libstdc++.so.6 has been improperly stripped, or damaged in some other way.

Here is a test program:

#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);
}

Build it with: g++ -g -std=c++11 t.cc , then:

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

If you don't get the same result (and I assume you wouldn't), try re-installing libstdc++.so.6 from libstdc++6 package. Installing libstdc++6-dbg may also help.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM