summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2015-05-27 13:56:27 +0100
committerMaxime Coste <frrrwww@gmail.com>2015-05-27 13:56:27 +0100
commite18c57cfd3236fee145dbf84fe811cf623add5bc (patch)
tree2f1c93083d7d68700cb8a75506a57e80251d974e
parent7245d2abe907b11bfa67c4ea0059ab00b34b5bc9 (diff)
Include backtrace in debug info in on_assert_failed
-rw-r--r--src/assert.cc7
-rw-r--r--src/backtrace.cc2
-rw-r--r--src/backtrace.hh2
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;
};
}