C++后台服务崩溃堆栈日志

  C/C++后台服务运行过程中总会出现一些不容易重现的崩溃故障,由于重现频率低,同时运行在服务器上,导致无法调试,此外服务直接崩溃,常规日志无法截获到有用信息,这时如果能够保留服务崩溃现场,将对后期的Bug调试起到事半功倍的效果。打印出崩溃时刻服务的堆栈信息的需求应运而生。

前提条件

  编译程序服务的Debug版本,没有调试信息,神仙也没有办法。-rdynamic 为可选参数(会在打印的堆栈信息中增加调用函数名称)。

  gcc: gcc -g -rdynamic main.cpp

  cmake: set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -rdynamic -O0 -Wall -g")

运行结果:

trigger signal: 11
./test_cario(_Z14signal_handleri+0x5e) [0x400e4b]
/lib64/libc.so.6(+0x35270) [0x7fc0c1e59270]
./test_cario(_Z4add2PKc+0x1f) [0x400f04]
./test_cario(_Z3addPKc+0x18) [0x400f61]
./test_cario(main+0xbc) [0x40101f]
/lib64/libc.so.6(__libc_start_main+0xf5) [0x7fc0c1e45c05]
./test_cario() [0x400d29]

  上面信息显示了崩溃时的调用堆栈,输出的信息只打印了调用地址,还需要对这些地址进行可视化:

[root@localhost debug]$ addr2line -e a.out 0x400e4b
/home/root/test/main.cpp:13
[root@localhost debug]$ addr2line -e a.out 0x400f04
/home/root/test/main.cpp:30
[root@localhost debug]$ addr2line -e a.out 0x400f61
/home/root/test/main.cpp:36
[root@localhost debug]$ addr2line -e a.out 0x40101f
/home/root/test/main.cpp:56

示例程序

#include <iostream>
#include <zconf.h>
#include <signal.h>
#include <execinfo.h>#include <stdio.h>
#include <stdlib.h>void signal_handler( int s ) {fprintf( stderr, "trigger signal: %d\n", s );void* pszstack[256] = {NULL};int stacknum = backtrace( pszstack, 256 );if ( stacknum > 0 ) {char** stacktrace = backtrace_symbols( pszstack, stacknum );for ( int i = 0; i < stacknum; ++i ) {fprintf( stderr, "%s\n", stacktrace[i] );}free( stacktrace );} else {fprintf( stderr, "no stack trace: %d", stacknum );}exit(0);
}void add2( const char* psz )
{int a = 0;int b = 1;std::cout << a+b << "data: " << psz[0] << std::endl;
}void add( const char* psz )
{add2( psz );
}int main() {signal( SIGPIPE, SIG_IGN );signal( SIGSEGV, signal_handler );signal( SIGABRT, signal_handler );signal( SIGFPE, signal_handler );signal( SIGSYS, signal_handler );signal( SIGIO, signal_handler );char* psztemp = NULL;for ( int i = 0; i < 5; ++i ){std::cout << "sleep: " << i << std::endl;sleep( 1 );}add(psztemp);for ( int i = 0; i < 5; ++i ){std::cout << "sleep2: " << i << std::endl;sleep( 1 );}return 0;
}

转载于:https://www.cnblogs.com/wanghaiyang1930/p/8884848.html

C++后台服务崩溃堆栈日志相关推荐

  1. ios崩溃日志收集_iOS崩溃与日志分析

    在iOS开发中经常需要靠记录日志来调试应用程序.解决崩溃问题等,整理常用的日志输出和崩溃日志分析. 最新更新:2018-11-30 基于CocoaLumberjack 的 Swift使用封装库 一.崩 ...

  2. # iOS进阶 # 崩溃与日志分析

    看什么看!点我呀! 全栈程序员,免费入门到精通! 作者丨就叫yang https://www.jianshu.com/p/5b132f0e31a3 在iOS开发中经常需要靠记录日志来调试应用程序.解决 ...

  3. 后台服务架构高性能设计之道

    "N 高 N 可",高性能.高并发.高可用.高可靠.可扩展.可维护.可用性等是后台开发耳熟能详的词了,它们中有些词在大部分情况下表达相近意思.本序列文章旨在探讨和总结后台架构设计中 ...

  4. Unity移动应用如何在Bugly上查看崩溃堆栈

    文章目录 一.使用Bugly对移动应用进行崩溃监控 二.崩溃类型 1.Java崩溃 2.Native崩溃 三.Bugly上传符号表解析崩溃堆栈 1.关于符号表 2.上传符号表 3.Native崩溃堆栈 ...

  5. 大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(二)后台服务代码部分

    程序写太长了,大家看着也累,我也写着也很辛苦,接下来,还是写得简短一些,尽量多一些截图,少一些文字吧. 同样是,欢迎指点批评的同学,我虚心学习提高,改改以往的高姿态. 架设软件系统就像大家看饭店厨师炒 ...

  6. 大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(二)后台服务代码部分...

    程序写太长了,大家看着也累,我也写着也很辛苦,接下来,还是写得简短一些,尽量多一些截图,少一些文字吧. 同样是,欢迎指点批评的同学,我虚心学习提高,改改以往的高姿态. 架设软件系统就像大家看饭店厨师炒 ...

  7. android 发送前台广播,使用IntentService与BroadcastReceiver实现后台服务(Android7.0可用)...

    IntentService的优点 IntentService会创建单独的线程处理所有的Intent请求, 会处理onHandleIntent方法实现的代码, 隐藏开发者无须处理多线程问题, 当所有请求 ...

  8. 【JavaService】部署Java jar为Windows后台服务

    将Java jar文件部署为Windows后台服务有多种方法:Service Installer.Java service Wrapper.JavaService.exe等等.这里介绍下使用JavaS ...

  9. C#实现Windows后台服务实例浅析

    2019独角兽企业重金招聘Python工程师标准>>> C#实现Windows后台服务实例之前要明白的一些概念:所谓Windows后台服务,即后台自动运行的程序,一般随操作系统启动而 ...

最新文章

  1. 【bzoj 1833】【codevs 1359】 [ZJOI2010]count 数字计数(数位dp)
  2. 台式计算机的cpu设置,i7型CPU进行了修改并在台式计算机上使用,这才是真正的计算机之神!...
  3. 如何分析案件的性质_刑事案件的管辖地怎么确定?刑事案件地域管辖是怎样的?...
  4. android点滴(25)之 original-package
  5. Linux从零开始(一、安装系统)
  6. 借助Redis完成延时任务
  7. 7-168 币值转换 (20 分)
  8. 关于软件系统维护的一点想法
  9. python使用HDF文件格式,保存多个类型的数据到一个文件
  10. 百度DOC php,PHP对接百度文档服务DOC
  11. 64位Linux下安装iNode客户端
  12. pyLDA系列︱考量时间因素的动态主题模型(Dynamic Topic Models)
  13. ant design vue折叠面板自定义header
  14. 最详细的 tf.cholesky_solve(chol, rhs, name=None)函数和tf.matrix_solve(matrix, rhs, adjoint=None, name=None)
  15. 破解 zip 压缩包程序
  16. 9.9 优美三角剖分 2718
  17. 基于PLC的矿泉水自动瓶装控制系统设计
  18. MAC 安装PS 破解
  19. Java中InputStream装饰器模式的大家族
  20. 【Android自动化】AccessibilityService实战-微信僵尸好友检测

热门文章

  1. Java程序设计基础(第5版)自研笔记
  2. java接口安全性解决方式
  3. 回忆那么长-《奇幻》《武侠》
  4. C++删除单链表中指定元素
  5. 第12期【江山代有才人出】5月刊
  6. 苹果home键在哪里设置_苹果手机添加水印在哪里设置 iphone拍照水印设置方法
  7. QC协议+华为FCP+三星AFC快充取电5V9V芯片XSQ07应用
  8. java 时间字符串 转换_java实现时间与字符串之间转换
  9. MySQL安装提示配置信息已损坏,请联系技术人员
  10. Android跳转到应用商店及常见APP对应包名