diff options
author | Dwight <dmerriman@gmail.com> | 2008-06-27 14:35:05 -0400 |
---|---|---|
committer | Dwight <dmerriman@gmail.com> | 2008-06-27 14:35:05 -0400 |
commit | d3e3876751b6becc9084b5508fd0a48178f30b1b (patch) | |
tree | 46d2e86cc3bfda7a5b41fb0092e3c060a7b8ebd2 /util | |
parent | 0c4751cb7856a849963841e59784d5058557e9a0 (diff) | |
download | mongo-d3e3876751b6becc9084b5508fd0a48178f30b1b.tar.gz |
stack traces
Diffstat (limited to 'util')
-rw-r--r-- | util/goodies.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/util/goodies.h b/util/goodies.h index 7f2a4f7cb34..8bb25f31afa 100644 --- a/util/goodies.h +++ b/util/goodies.h @@ -8,6 +8,26 @@ #if !defined(_WIN32) #include <pthread.h> inline pthread_t GetCurrentThreadId() { return pthread_self(); } +#include <execinfo.h> +/* use "addr2line -CFe <exe>" to parse. */ +inline void printStackTrace() { + void *b[12]; + size_t size; + char **strings; + size_t i; + + size = backtrace(b, 12); + strings = backtrace_symbols(b, size); + + for (i = 0; i < size; i++) + cout << ' ' << hex << b[i] << '\n'; + for (i = 0; i < size; i++) + cout << ' ' << strings[i] << '\n'; + + free (strings); +} +#else +inline void printStackTrace() { } #endif /* set to TRUE if we are exiting */ |