diff options
author | David Robillard <d@drobilla.net> | 2006-07-05 19:47:25 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2006-07-05 19:47:25 +0000 |
commit | 22c20ab6f215c0ab24702a479aa6821c25a7d058 (patch) | |
tree | 3f606773d2082fd3f28857e1c1ef876d2e007559 /libs/pbd/stacktrace.cc | |
parent | 5dc4abef7951c1a1b85fb6b9dbb194d73b8c4c2b (diff) |
Merged with trunk, and a few trivial GUI updates etc.
git-svn-id: svn://localhost/ardour2/branches/midi@664 d708f5d6-7413-0410-9779-e7cbd77b26cf
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 */ |