Boost有boost::stacktrace::stacktrace(),可以用来获取回溯。这通常是有用的非信号处理上下文,如异常,错误等。
但是从信号处理程序中被呼叫安全吗?也就是说,它不做任何异步信号不安全的活动?该示例确实从信号处理程序中使用它,这可能意味着它是安全的。但是我在它的文档中找不到关于异步信号安全的任何东西。
发布于 2019-08-08 17:32:17
赛格有:
警告编写信号处理程序需要高度关注!信号处理程序中只允许少数几个系统调用,因此没有跨平台方法来打印堆栈跟踪而不存在死锁风险。处理问题的唯一方法是将原始堆栈跟踪转储到文件/套接字中,并在程序重新启动时对其进行解析。 警告并不是所有的平台都能以异步信号安全的方式实现堆栈跟踪。在这样的平台上不会保存堆栈跟踪。
紧接着是:
#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);
}它继续使用示例,以及如何进行启动检查。
头同步:hpp
namespace boost {
namespace stacktrace {
std::size_t safe_dump_to(void *, std::size_t);
std::size_t safe_dump_to(std::size_t, void *, std::size_t);
std::size_t safe_dump_to(const char *);
std::size_t safe_dump_to(std::size_t, std::size_t, const char *);
std::size_t safe_dump_to(platform_specific_descriptor);
std::size_t safe_dump_to(std::size_t, std::size_t,
platform_specific_descriptor);
}
}发布于 2021-04-08 11:10:39
是的,我是。
作为,boost库中为倒置回溯提供的函数是boost::stacktrace::safe_dump_to。
文档 of safe_dump_to清楚地指出了Async-Handler-Safety: Safe
https://stackoverflow.com/questions/57391179
复制相似问题