eis/mix_cc/stacktrace/stacktrace.cc

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