diff options
Diffstat (limited to 'libs/pbd/stacktrace.cc')
-rw-r--r-- | libs/pbd/stacktrace.cc | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/libs/pbd/stacktrace.cc b/libs/pbd/stacktrace.cc new file mode 100644 index 0000000000..1e7dfa08e9 --- /dev/null +++ b/libs/pbd/stacktrace.cc @@ -0,0 +1,42 @@ +#include <pbd/stacktrace.h> +#include <iostream> + +/* Obtain a backtrace and print it to stdout. */ + +#ifdef HAVE_EXECINFO + +#include <execinfo.h> +#include <stdlib.h> + +void +PBD::stacktrace (std::ostream& out) +{ + void *array[200]; + size_t size; + char **strings; + size_t i; + + size = backtrace (array, 200); + strings = backtrace_symbols (array, size); + + if (strings) { + + printf ("Obtained %zd stack frames.\n", size); + + for (i = 0; i < size; i++) { + out << strings[i] << std::endl; + } + + free (strings); + } +} + +#else + +void +PBD::stacktrace (std::ostream& out) +{ + out << "stack tracing is not enabled on this platform" << std::endl; +} + +#endif /* HAVE_EXECINFO */ |