当前位置: 首页 > news >正文

glog使用: 07-错误信号处理(Failure Signal Handler)

提供了一个方便的信号处理程序,当程序在某些信号(如SIGSEGV)上崩溃时,它将转储有用的信息。

信号处理程序可以通过 google::InstallFailureSignalHandler() 安装。以下是信号处理程序输出的示例:

#include <iostream>#include <glog/logging.h>int main(int argc, char* argv[])
{(void)argc;//avoid unused warninggoogle::InitGoogleLogging(argv[0]);// install failure signal handlergoogle::InstallFailureSignalHandler();//模拟触发段错误*(int*)0 = 0;//后续不会执行,因为段错误导致程序崩溃LOG(FATAL) << "FATAL log message";return 0;
}

输出:

# ./demo
*** Aborted at 1758626944 (unix time) try "date -d @1758626944" if you are using GNU date ***
PC: @                0x0 (unknown)
*** SIGSEGV (@0x0) received by PID 57 (TID 0x743bde537e40) from PID 0; stack trace: ***@     0x743bdd036400 (unknown)@           0x400a8e main@     0x743bdd022555 __libc_start_main@           0x400999 (unknown)@                0x0 (unknown)
Segmentation fault (core dumped)

默认情况下,信号处理程序将故障转储写入标准错误。你可以通过 InstallFailureWriter() 自定义目标。

添加相关逻辑,有点怪,原来打印的SIGSEGV错误字样,哪里都找不见了,这不是画蛇添足么…
貌似这个还得建议搭配libunwind使用,等待后续有需要再探索吧。

#include <iostream>
#include <string>#include <glog/logging.h>void FailureWriter(const char* data, size_t size)
{LOG(FATAL) << std::string(data,size);
}int main(int argc, char* argv[])
{(void)argc;//avoid unused warninggoogle::InitGoogleLogging(argv[0]);// install failure signal handlergoogle::InstallFailureSignalHandler();//默认输出到标准错误,可以自定义一个函数来将错误输出到其他地方google::InstallFailureWriter(&FailureWriter);//模拟触发段错误*(int*)0 = 0;//后续不会执行,因为段错误导致程序崩溃LOG(FATAL) << "FATAL log message";return 0;
}

错误输出:

# ./demo
F20250923 19:39:11.574347    86 07.cpp:8] *** Aborted at 1758627551 (unix time) try "date -d @1758627551" if you are using GNU date ***
*** Check failure stack trace: ***@     0x7af9321d816a  google::LogMessage::Fail()@     0x7af9321d80ca  google::LogMessage::SendToLog()@     0x7af9321d7917  google::LogMessage::Flush()@     0x7af9321db104  google::LogMessageFatal::~LogMessageFatal()@           0x400e50  FailureWriter()@     0x7af9321e4575  google::(anonymous namespace)::DumpTimeInfo()@     0x7af9321e4a26  google::(anonymous namespace)::FailureSignalHandler()@     0x7af931236400  (unknown)@           0x400ebc  main@     0x7af931222555  __libc_start_main@           0x400cf9  (unknown)@              (nil)  (unknown)
Aborted (core dumped)

日志文件:

Log file created at: 2025/09/23 19:39:11
Running on machine: DESKTOP-RR46KEP
Running duration (h:mm:ss): 0:00:00
Log line format: [IWEF]yyyymmdd hh:mm:ss.uuuuuu threadid file:line] msg
F20250923 19:39:11.574347    86 07.cpp:8] *** Aborted at 1758627551 (unix time) try "date -d @1758627551" if you are using GNU date ***
http://www.dtcms.com/a/399351.html

相关文章:

  • Netty从0到1系列之内置Handler【下】
  • java服务注册到 Nacos 及相关配置
  • 设计网站与建设wordpress网站部署
  • 扬州鼎盛开发建设有限公司网站简单的ps网页设计教程
  • 本地AI部署成趋势:LocalAl+cpolar安全指南
  • 概率编程实战:使用Pyro/PyMC3构建贝叶斯模型
  • 数据结构系列之链表
  • 194-基于Python的脑肿瘤患者数据分析可视化
  • 在 Mac 上无线挂载 Android /sdcard
  • Nature论文解读DeepSeek R1:MoE架构如何重构高效推理的技术范式
  • 拆炸弹-定长滑动窗口/环形数组
  • 成都市城乡建设局网站重庆市建设施工安全网站
  • 力扣1003
  • LeetCode 386 字典序排数 Swift 题解:模拟字典翻页的遍历技巧
  • 如何给 wot-ui(wot-design-uni)日历里给某几天加「原点」标注 —— 实战指南
  • 网站分析培训班西安有哪些大公司
  • Vue——02 Vue指令和Vue对象的配置项
  • 商城网站模板框架购物网站如何做推广
  • html个人网站设计网络营销推广的方式都有哪些
  • 【Linux】进程概念(五) 命令行参数与环境变量的深度解析
  • 网站认领微平台公众号
  • 微盟网站模板某购物网站开发项目
  • ManualResetEvent:C# 线程同步工具
  • 手机移动端网站怎么做的第一ppt模板官网
  • C# 车牌识别系统实现
  • 国内做医疗耗材的网站宁波seo推广哪家公司好
  • vue3中返回带参数如何实现?
  • Kafka Rebalance机制全解析
  • 温州集团网站建设网站怎么做外部链接
  • 华为云产品体系选择