aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-05-21 12:18:49 +0200
committerMartin Willi <martin@revosec.ch>2012-05-21 12:18:49 +0200
commit32400cd91a5258ec40fa2f9740bf7e41ed118a87 (patch)
treeed3ecf557cd0112fc1b56ae733c7f9a01372f3bb /src/libstrongswan
parentb5341bb07c8b8f3f31c2bc04e9106b587e9c6dff (diff)
downloadstrongswan-32400cd91a5258ec40fa2f9740bf7e41ed118a87.tar.bz2
strongswan-32400cd91a5258ec40fa2f9740bf7e41ed118a87.tar.xz
Added a convenience function to dump backtraces for gdb-less debugging
Diffstat (limited to 'src/libstrongswan')
-rw-r--r--src/libstrongswan/utils/backtrace.c17
-rw-r--r--src/libstrongswan/utils/backtrace.h9
2 files changed, 26 insertions, 0 deletions
diff --git a/src/libstrongswan/utils/backtrace.c b/src/libstrongswan/utils/backtrace.c
index cb83d9830..db10c7844 100644
--- a/src/libstrongswan/utils/backtrace.c
+++ b/src/libstrongswan/utils/backtrace.c
@@ -248,3 +248,20 @@ backtrace_t *backtrace_create(int skip)
return &this->public;
}
+/**
+ * See header
+ */
+void backtrace_dump(char *label, FILE *file, bool detailed)
+{
+ backtrace_t *backtrace;
+
+ backtrace = backtrace_create(2);
+
+ if (label)
+ {
+ fprintf(file, "Debug backtrace: %s\n", label);
+ }
+ backtrace->log(backtrace, file, detailed);
+ backtrace->destroy(backtrace);
+}
+
diff --git a/src/libstrongswan/utils/backtrace.h b/src/libstrongswan/utils/backtrace.h
index 9d59d2503..32d09043f 100644
--- a/src/libstrongswan/utils/backtrace.h
+++ b/src/libstrongswan/utils/backtrace.h
@@ -77,4 +77,13 @@ struct backtrace_t {
*/
backtrace_t *backtrace_create(int skip);
+/**
+ * Create a backtrace, dump it and clean it up.
+ *
+ * @param label description to print for this backtrace, or NULL
+ * @param file FILE to log backtrace to
+ * @param detailed TRUE to resolve line/file using addr2line (slow)
+ */
+void backtrace_dump(char *label, FILE *file, bool detailed);
+
#endif /** BACKTRACE_H_ @}*/