20 #include "libpbd-config.h"
40 symbol_demangle (
const std::string& l)
46 char* realname = abi::__cxa_demangle (l.c_str(), 0, 0, &status);
47 std::string d (realname);
50 }
catch (std::exception) {
60 std::string::size_type
const b = l.find_first_of (
"(");
62 if (b == std::string::npos) {
63 return symbol_demangle (l);
66 std::string::size_type
const p = l.find_last_of (
"+");
67 if (p == std::string::npos) {
68 return symbol_demangle (l);
72 return symbol_demangle (l);
75 std::string
const fn = l.substr (b + 1, p - b - 1);
77 return symbol_demangle (fn);
88 size = backtrace (array, 200);
91 strings = backtrace_symbols (array, size);
95 for (i = 0; i < size && (levels == 0 || i < size_t(levels)); i++) {
96 out <<
" " <<
demangle (strings[i]) << std::endl;
102 out <<
"no stacktrace available!" << std::endl;
111 return std::string();
117 out <<
"stack tracing is not enabled on this platform" << std::endl;
LIBPBD_API void stacktrace(std::ostream &out, int levels=0)
LIBPBD_API void trace_twb()
LIBPBD_API std::string demangle(const std::string &)