30 lines
776 B
C++
30 lines
776 B
C++
|
|
#include "mix_cc/stacktrace/stacktrace.h"
|
||
|
|
namespace mix_cc {
|
||
|
|
typedef boost::error_info<struct tag_stacktrace, boost::stacktrace::stacktrace>
|
||
|
|
traced;
|
||
|
|
|
||
|
|
void mix_cc_signal_handler(int signum) {
|
||
|
|
::signal(signum, SIG_DFL);
|
||
|
|
boost::stacktrace::safe_dump_to("./backtrace.dump");
|
||
|
|
::raise(SIGABRT);
|
||
|
|
}
|
||
|
|
|
||
|
|
std::string auto_check_dump() {
|
||
|
|
std::ostringstream oss;
|
||
|
|
if (boost::filesystem::exists("./backtrace.dump")) {
|
||
|
|
// there is a backtrace
|
||
|
|
std::ifstream ifs("./backtrace.dump");
|
||
|
|
|
||
|
|
boost::stacktrace::stacktrace st =
|
||
|
|
boost::stacktrace::stacktrace::from_dump(ifs);
|
||
|
|
oss << "Previous run crashed:\n" << st << std::endl;
|
||
|
|
|
||
|
|
// cleaning up
|
||
|
|
ifs.close();
|
||
|
|
boost::filesystem::remove("./backtrace.dump");
|
||
|
|
}
|
||
|
|
return oss.str();
|
||
|
|
}
|
||
|
|
|
||
|
|
} // namespace mix_cc
|