diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2015-05-27 13:56:27 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2015-05-27 13:56:27 +0100 |
| commit | e18c57cfd3236fee145dbf84fe811cf623add5bc (patch) | |
| tree | 2f1c93083d7d68700cb8a75506a57e80251d974e | |
| parent | 7245d2abe907b11bfa67c4ea0059ab00b34b5bc9 (diff) | |
Include backtrace in debug info in on_assert_failed
| -rw-r--r-- | src/assert.cc | 7 | ||||
| -rw-r--r-- | src/backtrace.cc | 2 | ||||
| -rw-r--r-- | src/backtrace.hh | 2 |
3 files changed, 7 insertions, 4 deletions
diff --git a/src/assert.cc b/src/assert.cc index eb88120c..67dc6e07 100644 --- a/src/assert.cc +++ b/src/assert.cc @@ -2,6 +2,7 @@ #include "exception.hh" #include "debug.hh" +#include "backtrace.hh" #if defined(__CYGWIN__) #include <windows.h> @@ -26,8 +27,10 @@ private: void on_assert_failed(const char* message) { - String debug_info = format("pid: {}", getpid()); - write_debug(format("assert failed: '{}' ", message, debug_info)); + char* callstack = Backtrace{}.desc(); + String debug_info = format("pid: {}\ncallstack:\n{}", getpid(), callstack); + free(callstack); + write_debug(format("assert failed: '{}'\n{}", message, debug_info)); const auto msg = format("{}\n[Debug Infos]\n{}", message, debug_info); #if defined(__CYGWIN__) diff --git a/src/backtrace.cc b/src/backtrace.cc index f7be9f76..4f8aacf8 100644 --- a/src/backtrace.cc +++ b/src/backtrace.cc @@ -21,7 +21,7 @@ Backtrace::Backtrace() #endif } -const char* Backtrace::desc() const +char* Backtrace::desc() const { #if defined(__linux__) || defined(__APPLE__) char** symbols = backtrace_symbols(stackframes, num_frames); diff --git a/src/backtrace.hh b/src/backtrace.hh index 5eca8827..8f146372 100644 --- a/src/backtrace.hh +++ b/src/backtrace.hh @@ -11,7 +11,7 @@ struct Backtrace int num_frames = 0; Backtrace(); - const char* desc() const; + char* desc() const; }; } |
