summaryrefslogtreecommitdiff
path: root/libddekit
diff options
context:
space:
mode:
authorZheng Da <zhengda1936@gmail.com>2010-04-06 04:33:16 +0200
committerZheng Da <zhengda1936@gmail.com>2010-04-06 04:33:16 +0200
commitd31e486426aed7952b3468a63f2e81735d09943c (patch)
tree63215440d9770036636fe079f35fb2f1932adb23 /libddekit
parent405f510fe09f80213e26c89bb365beaedeca3ad2 (diff)
implement dump_stack in libddekit with backtrace.
Diffstat (limited to 'libddekit')
-rw-r--r--libddekit/include/ddekit/printf.h2
-rw-r--r--libddekit/printf.c12
2 files changed, 14 insertions, 0 deletions
diff --git a/libddekit/include/ddekit/printf.h b/libddekit/include/ddekit/printf.h
index 35b0dfa1..6dafa18d 100644
--- a/libddekit/include/ddekit/printf.h
+++ b/libddekit/include/ddekit/printf.h
@@ -18,6 +18,8 @@ int ddekit_printf(const char *fmt, ...);
*/
int ddekit_vprintf(const char *fmt, va_list va);
+void dump_stack(void);
+
/** Log function and message.
* \ingroup DDEKit_util
*/
diff --git a/libddekit/printf.c b/libddekit/printf.c
index dacc65e6..c4a8b718 100644
--- a/libddekit/printf.c
+++ b/libddekit/printf.c
@@ -10,6 +10,7 @@
#include <stdlib.h>
#include <unistd.h>
#include <mach.h>
+#include <execinfo.h>
#include "ddekit/printf.h"
@@ -93,3 +94,14 @@ int log_init ()
return 0;
}
+
+void dump_stack()
+{
+#define NUM_TRACES 16
+ void *trace[NUM_TRACES];
+ int trace_size = 0;
+
+ fprintf (stderr, "dump the stack\n");
+ trace_size = backtrace(trace, NUM_TRACES);
+ backtrace_symbols_fd(trace, trace_size, 2);
+}