在windows下最方便的是minidump,其他2个平台麻烦不少,google-breakpad使用起来又太麻烦.

最近boost1.65版本出了个stacktrace使用起来简单方便,只是无法看实际数据,对于快速定位BUG还是很有帮助的.

要注意的是异常的处理需要写文件,应用重启之后再读取查看~  用其他应用读取或者修改应用之后读取都会无法正确显示!!!

 1 #pragma once2 //异常生成dump时立刻查看会死锁,只能重启应用后才能查看3 4 #ifndef BOOST_ENABLE_ASSERT_DEBUG_HANDLER5 #define BOOST_ENABLE_ASSERT_DEBUG_HANDLER6 #endif7 8 #include <string>9 #include <boost/noncopyable.hpp>
10 #include <boost/function.hpp>
11 #include <boost/stacktrace.hpp>
12
13 class plugin_dump :
14     private boost::noncopyable
15 {
16 public:
17     plugin_dump();
18     ~plugin_dump();
19
20     //显示dump信息回调
21     typedef boost::function1<void, const boost::stacktrace::stacktrace&> ON_DUMP;
22
23     void set_handler(ON_DUMP _handler);
24
25     static std::string gen_filename();
26 private:
27     void show_last_dump();
28     ON_DUMP m_handler;
29 };

 1 #include "stdafx.h"2 #include "plugin_dump.h"3 4 #include <signal.h>     // ::signal, ::raise5 #include <strstream>6 #include <stdexcept>    // std::logic_error7 #include <iostream>     // std::cerr8 #include <boost/filesystem.hpp>9 #include <enable_process_info.hpp>
10
11 void g_signal_handler(int signum) {
12     ::signal(signum, SIG_DFL);
13     std::string filename = plugin_dump::gen_filename();
14     if (boost::filesystem::exists(filename.c_str()))
15         boost::filesystem::remove(filename.c_str());
16     boost::stacktrace::safe_dump_to(3, boost::stacktrace::detail::max_frames_dump, filename.c_str());
17     ::raise(SIGABRT);
18 }
19
20 plugin_dump::plugin_dump()
21 {
22     ::signal(SIGSEGV, &g_signal_handler);
23     ::signal(SIGABRT, &g_signal_handler);
24     if (!boost::filesystem::exists("./dumps"))
25         boost::filesystem::create_directory("./dumps");
26 }
27
28 plugin_dump::~plugin_dump()
29 {
30
31 }
32
33 void plugin_dump::set_handler(ON_DUMP _handler)
34 {
35     m_handler = _handler;
36     show_last_dump();
37 }
38
39 void plugin_dump::show_last_dump()
40 {
41     std::string filename = plugin_dump::gen_filename();
42     if (boost::filesystem::exists(filename.c_str())) {
43
44         std::ifstream ifs(filename.c_str());
45         boost::stacktrace::stacktrace st = boost::stacktrace::stacktrace::from_dump(ifs);
46
47         if (!m_handler.empty())
48             m_handler(st);
49         else
50             std::cout << st;
51
52         ifs.close();
53         std::getchar();
54     }
55 }
56
57 std::string plugin_dump::gen_filename()
58 {
59     std::string file = "./dumps/" + enable_process_info::get_processname() + ".dump";
60     return file;
61 }
62
63 //
64 // BOOST_ENABLE_ASSERT_DEBUG_HANDLER is defined for the whole project
65 namespace boost {
66     inline void assertion_failed_msg(char const* expr, char const* msg, char const* function, char const* /*file*/, long /*line*/) {
67         std::cerr << "Expression '" << expr << "' is false in function '" << function << "': " << (msg ? msg : "<...>") << ".\n"
68             << "Backtrace:\n" << boost::stacktrace::stacktrace() << '\n';
69         std::abort();
70     }
71
72     inline void assertion_failed(char const* expr, char const* function, char const* file, long line) {
73         ::boost::assertion_failed_msg(expr, 0 /*nullptr*/, function, file, line);
74     }
75 } // namespace boost

boost stacktrace堆栈打印相关推荐

  1. boost::stacktrace::detail::void_ptr_cast相关的测试程序

    boost::stacktrace::detail::void_ptr_cast相关的测试程序 实现功能 C++实现代码 实现功能 boost::stacktrace::detail::void_pt ...

  2. boost::stacktrace模块实现终止处理程序的测试程序

    boost::stacktrace模块实现终止处理程序的测试程序 实现功能 C++实现代码 实现功能 boost::stacktrace模块实现终止处理程序的测试程序 C++实现代码 #include ...

  3. boost::filesystem模块打印文件状态的测试程序

    boost::filesystem模块打印文件状态的测试程序 实现功能 C++实现代码 实现功能 boost::filesystem模块打印文件状态的测试程序 C++实现代码 #include < ...

  4. boost::filesystem模块打印文件的大小的测试程序

    boost::filesystem模块打印文件的大小的测试程序 实现功能 C++实现代码 实现功能 boost::filesystem模块打印文件的大小的测试程序 C++实现代码 #include & ...

  5. boost::posix_time模块打印当天的剩余小时数的测试程序

    boost::posix_time模块打印当天的剩余小时数的测试程序 实现功能 C++实现代码 实现功能 boost::posix_time模块打印当天的剩余小时数的测试程序 C++实现代码 #inc ...

  6. boost::stacktrace::detail相关的测试程序

    boost::stacktrace::detail相关的测试程序 实现功能 C++实现代码 实现功能 boost::stacktrace::detail相关的测试程序 C++实现代码 #include ...

  7. boost::stacktrace::stacktrace相关的测试程序

    boost::stacktrace::stacktrace相关的测试程序 实现功能 C++实现代码 实现功能 boost::stacktrace::stacktrace相关的测试程序 C++实现代码 ...

  8. Android hal 层 C 堆栈打印方法

    Android hal 层 C 堆栈打印方法 一.添加CallStack文件 在hardware/qcom/audio/hal/ 下添加 callstack.cpp 和 callstack.h文件 # ...

  9. boost::stacktrace模块入门调试功能相关的测试程序

    boost::stacktrace模块入门调试功能相关的测试程序 实现功能 C++实现代码 实现功能 boost::stacktrace模块入门调试功能相关的测试程序 C++实现代码 #include ...

最新文章

  1. 你不知道的z-index
  2. 《HTML5移动应用开发入门经典》—— 1.1 了解HTML5的由来
  3. mysql 变量作用_MySQL变量的用法
  4. java 队列复制_java - 复制堆栈或队列,而无需使用“克隆” - 堆栈内存溢出
  5. 页面中用到iframe不能完全显示的解决方案
  6. php如何操作mysql数据库代码_php如何操作mysql数据库的类(附代码)
  7. 中countif函数_Count系列函数-Count、Counta、Countblank、Countif、Countifs
  8. ss模型复模态的物理意义及adams复模态振型求解
  9. 【教程】从人脸检测与比对,实测七牛云人脸核验 API
  10. JAVA冰箱评测开题报告,家用冰箱毕业论文 开题报告
  11. 数据结构1800题-错题集-第六章
  12. Attention机制--concat方式
  13. 华为手机备份的通讯录是什么文件_华为手机怎样备份手机通讯录(教你微信如何备份手机通讯...
  14. 如何在电脑上下载node.js并启动相应网易云服务器最全【该服务器见尚硅谷2021版微信小程序开发p20】
  15. 监控摄像头角度范围计算方法
  16. 微信公众号音乐html,如何在微信公众号文章内插入音频及样式?
  17. linux原生桌面,亲手打造自己的Linux桌面环境
  18. 根据银行卡号来获取银行名称-java
  19. Android中Notification的使用(一)
  20. wex5 教程之 图文讲解 Cloudx5一键部署

热门文章

  1. JAVA入门级教学之(super关键字)
  2. java 递归_采用递归算法求解迷宫问题(Java版) | 附代码+视频
  3. js br不生效_前端标注工具-AILabel.js
  4. 计算机科学美国大学专业,2018美国大学计算机科学专业大排名
  5. php 时间格式化_3分钟短文 | PHP获取函数的代码片段,唯有反射最高效
  6. 为什么要学习Java EE?需要掌握哪些技能?
  7. vector父类类型可以存放子类吗_拼夕夕三轮面经:被问到反射和泛型的bug,你踏空了吗?...
  8. python 安卓app开发环境搭建_基于react-native的APP开发环境配置
  9. 操作系统中的全局页面置换算法
  10. 是vans_Vans 的旧海报上原来有这么多学问…