Boost logo

Boost :

Subject: [boost] [Backtrace] Any interest in portable stack trace?
From: Artyom (artyomtnk_at_[hidden])
Date: 2010-10-20 15:47:41


Is there any interest in getting portable stack trace to boost - get
something similar to Java's printStackTrace.


  1. Getting stack trace of return pointers
  2. Converting this pointers to human readable trace


  1. Create exception classes that capture stack trace on throw (only pointers)
  2. Print a trace on catch

Supported Platforms:
   Linux, Mac OS X, Solaris and Windows >= XP using MSVC.

Tested on:

   Linux x86_64, GCC,
   Linux x86, GCC
   Linux x86_64, Intel
   Windows XP 32bit, MSVC 2008

How implemented:

Linux/Mac/Solaris with GCC:

   Capture trace using backtrace
   Convert trace using dladdr + with demangling
   Requires: compilation with -rdynamic for fetching symbols

Linux/Mac/Solaris with Other compilers:

   Capture trace using backtrace
   Convert trace using backtrace_symbols (no demangling)
   Requires: compilation with -rdynamic for fetching symbols


   Capture trace using RtlCaptureStackBackTrace (XP and Above)
   Convert trace using dbghelp.lib using SymFromAddr
   Requires: debug info (PDB files) for fetching symbols

All other:

   Create an empty trace

For example:

    #include <boost/backtrace.hpp>
    #include <iostream>
    int foo()
        throw boost::runtime_error("My Error");
        return 10;
    int bar()
        return foo()+20;
    int main()
        try {
            std::cout << bar() << std::endl;
        catch(std::exception const &e)
            std::cerr << e.what() << std::endl;
            std::cerr << boost::trace(e);


    My Error
    0x403fe1: boost::stack_trace::trace(void**, int) + 0x1b in ./test_backtrace
    0x405451: boost::backtrace::backtrace(unsigned long) + 0x65 in
    0x4054d2: boost::runtime_error::runtime_error(std::string const&) + 0x32 in
    0x40417e: foo() + 0x44 in ./test_backtrace
    0x40425c: bar() + 0x9 in ./test_backtrace
    0x404271: main + 0x10 in ./test_backtrace
    0x7fd612ecd1a6: __libc_start_main + 0xe6 in /lib/
    0x403b39: __gxx_personality_v0 + 0x99 in ./test_backtrace

Initial Source Code:

Any interest?


Boost list run by bdawes at, gregod at, cpdaniel at, john at