Backtraces

QNX SDP8.0TechnotesDeveloperUser

The libbacktrace library gives you a way to programmatically backtrace a running process from within itself. You can use backtracing for debugging, as well as for diagnostics or logging. Most of the time, you should use gdb for debugging.

The backtrace library lets you:

  • backtrace the calling thread
  • backtrace a thread within the same process
  • backtrace a thread in another process
  • backtrace C code
  • backtrace C++ code

Note the following:

  • Backtracing is a best effort, and may at times be inaccurate due to the nature of backtracing (e.g. optimized code can confuse the backtracer).
  • Backtracing a corrupt stack could cause a fatal SIGSEGV.
  • The backtrace library needs to trap SIGSEGV and SIGBUS, but gdb normally catches these signals. If you're using gdb on a program that uses libbacktrace, you need to tell gdb to pass these signals to the program for correct operation:
    handle SIGSEGV pass
    handle SIGBUS pass
      
Note: The backtrace library is an unsupported feature, due to its fragility. The functionality it offers is available via gdb in a safer and more stable way; gdb uses debugging information to unwind, while backtrace uses guessing — it decodes instructions/stack/registers to figure out the return address, and this is prone to errors. GDB uses such guessing only as a fallback when symbols aren't available.

Due to multiple gcc versions that can be used, and in each of them probable different optimizations, backtrace accuracy is directly affected; it is almost certain the backtrace won't work in many cases.

Page updated: