【问题标题】:Human readable boost::stacktrace::safe_dump output人类可读的 boost::stacktrace::safe_dump 输出
【发布时间】:2021-10-03 04:27:48
【问题描述】:

我正在尝试使用 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 答案(和function documentation)中找到的一种替代方法是使用od -tx8 -An &lt;dumpfile&gt;,但它的输出似乎仍然不是人类可读的。 Coliru Snippet

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

【问题讨论】:

    标签: c++ linux boost boost-stacktrace


    【解决方案1】:

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

    #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);
    }
    

    【讨论】:

    • 我特别想使用boost::stacktrace::safe_dump_to,因为它是异步信号安全的,即在信号处理程序中具有明确定义的行为。 stackoverflow.com/q/34465275/3656081中的更多解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 2012-06-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    相关资源
    最近更新 更多