On Sat, Jun 18, 2016 at 12:51 PM, Jason Roehm <jasonr@3db-labs.com> wrote:


On Jun 18, 2016, at 12:44 PM, Antony Polukhin <antoshkka@gmail.com> wrote:



2016-06-18 17:49 GMT+03:00 Edward Diener <eldiener@tropicsoft.com>:
On 6/18/2016 6:34 AM, Antony Polukhin wrote:
Is there interest in it?
What functionality would you like to have in it?

Documentation is always helpful.

Yeep, that's currently missing :(

If in short:
namespace boost { namespace stacktrace {
class stacktrace {
public:
    BOOST_STATIC_CONSTEXPR std::size_t max_symbol_width = 256;
    typedef boost::array<char, max_symbol_width>  frame_t;

    stacktrace() BOOST_NOEXCEPT;
    stacktrace(const stacktrace& bt) BOOST_NOEXCEPT;
    stacktrace& operator=(const stacktrace& bt) BOOST_NOEXCEPT;
    ~stacktrace() BOOST_NOEXCEPT;

    std::size_t size() const BOOST_NOEXCEPT;
    frame_t operator[](std::size_t frame) const BOOST_NOEXCEPT;
};

template <class CharT, class TraitsT>
std::basic_ostream<CharT, TraitsT>& operator<<(std::basic_ostream<CharT, TraitsT>& os, const stacktrace& bt);
}}

So you can construct stacktraces, copy them and output them to streams:

std::cerr << stacktrace();

I think a library like this could be very useful for practical cross-platform development. 


Years back I implemented an abstraction for this which I contributed to ACE (http://www.dre.vanderbilt.edu/%7Eschmidt/ACE.html)

https://github.com/DOCGroup/ACE_TAO/blob/master/ACE/ace/Stack_Trace.h
https://github.com/DOCGroup/ACE_TAO/blob/master/ACE/ace/Stack_Trace.cpp

You might be able to use the implementations there as a starting point.

--
Chris Cleeland