summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorDwight <dmerriman@gmail.com>2008-06-27 14:35:05 -0400
committerDwight <dmerriman@gmail.com>2008-06-27 14:35:05 -0400
commitd3e3876751b6becc9084b5508fd0a48178f30b1b (patch)
tree46d2e86cc3bfda7a5b41fb0092e3c060a7b8ebd2 /util
parent0c4751cb7856a849963841e59784d5058557e9a0 (diff)
downloadmongo-d3e3876751b6becc9084b5508fd0a48178f30b1b.tar.gz
stack traces
Diffstat (limited to 'util')
-rw-r--r--util/goodies.h20
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 */