首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost堆栈跟踪异步信号安全吗?

Boost堆栈跟踪异步信号安全吗?
EN

Stack Overflow用户
提问于 2019-08-07 09:29:31
回答 2查看 490关注 0票数 4

Boost有boost::stacktrace::stacktrace(),可以用来获取回溯。这通常是有用的非信号处理上下文,如异常,错误等。

但是从信号处理程序中被呼叫安全吗?也就是说,它不做任何异步信号不安全的活动?该示例确实从信号处理程序中使用它,这可能意味着它是安全的。但是我在它的文档中找不到关于异步信号安全的任何东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-08 17:32:17

赛格有:

警告编写信号处理程序需要高度关注!信号处理程序中只允许少数几个系统调用,因此没有跨平台方法来打印堆栈跟踪而不存在死锁风险。处理问题的唯一方法是将原始堆栈跟踪转储到文件/套接字中,并在程序重新启动时对其进行解析。 警告并不是所有的平台都能以异步信号安全的方式实现堆栈跟踪。在这样的平台上不会保存堆栈跟踪。

紧接着是:

代码语言:javascript
复制
#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

代码语言:javascript
复制
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);
  }
}
票数 3
EN

Stack Overflow用户

发布于 2021-04-08 11:10:39

是的,我是

作为,boost库中为倒置回溯提供的函数是boost::stacktrace::safe_dump_to

文档 of safe_dump_to清楚地指出了Async-Handler-Safety: Safe

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57391179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档