1

我正在尝试使用 boost::stacktrace 设置堆栈跟踪日志信号处理程序。Boost 文档建议:

#include <signal.h>     // ::signal, ::raise
#include <boost/stacktrace.hpp>

void my_signal_handler(int signum) {
    ::signal(signum, SIG_DFL);
    boost::stacktrace::safe_dump_to("./backtrace.dump");
    ::raise(SIGABRT);
}

但是,该文件的输出是二进制格式,文档似乎没有提到如何阅读,除了使用boost::stacktrace::from_dump. 我从另一个 SO 答案(和函数文档)中找到的一种替代方法是使用od -tx8 -An <dumpfile>,但它的输出似乎仍然不适合人类阅读。Coliru 片段

有没有办法使用标准的 linux 工具来读取这个文件?

4

1 回答 1

-2

如果您需要输出文件中的文本调用堆栈,请编写如下:

#include <signal.h>     // ::signal, ::raise
#include <boost/stacktrace.hpp>

static void crashHandler( int sig_num )
{
    std::ofstream f("./backtrace.txt");
    f << to_string( boost::stacktrace::stacktrace() );
    f.close();
}

void test() {
    ::signal(SIGABRT, crashHandler);
    ::raise(SIGABRT);
}
于 2021-08-04T15:24:05.553 回答