diff options
author | Martin Willi <martin@revosec.ch> | 2012-05-21 12:18:49 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-05-21 12:18:49 +0200 |
commit | 32400cd91a5258ec40fa2f9740bf7e41ed118a87 (patch) | |
tree | ed3ecf557cd0112fc1b56ae733c7f9a01372f3bb /src/libstrongswan | |
parent | b5341bb07c8b8f3f31c2bc04e9106b587e9c6dff (diff) | |
download | strongswan-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.c | 17 | ||||
-rw-r--r-- | src/libstrongswan/utils/backtrace.h | 9 |
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_ @}*/ |