|
Boost : |
Subject: [boost] [Backtrace] Any interest in portable stack trace?
From: Artyom (artyomtnk_at_[hidden])
Date: 2010-10-20 15:47:41
Hello,
Is there any interest in getting portable stack trace to boost - get
something similar to Java's printStackTrace.
Basics:
1. Getting stack trace of return pointers
2. Converting this pointers to human readable trace
Extras:
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
Windows/MSVC
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);
}
}
Prints:
My Error
0x403fe1: boost::stack_trace::trace(void**, int) + 0x1b in ./test_backtrace
0x405451: boost::backtrace::backtrace(unsigned long) + 0x65 in
./test_backtrace
0x4054d2: boost::runtime_error::runtime_error(std::string const&) + 0x32 in
./test_backtrace
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/libc.so.6
0x403b39: __gxx_personality_v0 + 0x99 in ./test_backtrace
Initial Source Code:
http://art-blog.no-ip.info/files/backtrace.tar.gz
Any interest?
Artyom
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk