BugTrap:程序崩溃快照、bug跟踪之利器
来源:清泛网 http://www.tsingfun.com/html/2016/debug_0412/1354.html
BugTrap的github官网地址:https://github.com/bchavez/BugTrap
下载源码解压后可直接进行编译,
这里提供一下编译好的dll及lib文件(Unicode版本,如需其他版本请自行下载源码编译)。
效果预览(当程序崩溃时):
点“详情”:
点“预览”:
BugTrap使用方法:
BOOL CMarketInfoApp::InitInstance()
{...SetRegistryKey(_T("应用程序向导生成的本地应用程序"));// 开启程序崩溃感知SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);...
}
逻辑处理MyBugTrap.cpp:
#include "stdafx.h"
#include "BugTrap\BugTrap.h"
#include "MyBugTrap.h"static void SetupExceptionHandler()
{LOG_TRACER();BT_InstallSehFilter();// 配置信息BT_SetAppName(_T("MarketInfo"));BT_SetDialogMessage(BTDM_INTRO1, _T("We're so Sorry, program crashed because of our mistakes !"));BT_SetDialogMessage(BTDM_INTRO2, _T("本程序会尝试收集仅与此次异常崩溃相关的数据,请将此报告发送给我们以便帮助我们开发体验更好的产品,给您造成的不便之处敬请谅解!"));BT_SetSupportEMail(_T("futures_bugreport@tsingfun.com"));// BTF_DETAILEDMODE:崩溃时记录dump文件,不设置的话报告中没有dump文件// BTF_ATTACHREPORT:点”发送到“可以通过带附件的邮件发送报告// BTF_SCREENCAPTURE:错误报告中附带一张崩溃时屏幕截图// BTF_EDITMAIL:点”发送到“可以发送邮件到指定地址(没有附件,不可更改目的地址)// BTF_LISTPROCESSES:列出崩溃时所有的进程信息(速度较慢)// BTF_SHOWADVANCEDUI:崩溃后默认显示详细对话框(不设置的话,先显示简单对话框,有查看详细的按钮) // BTF_DESCRIBEERROR:发送报告之前弹出问题描述对话框,让用户输入错误描述信息BT_SetFlags(BTF_DETAILEDMODE | BTF_ATTACHREPORT | BTF_SCREENCAPTURE);BT_SetSupportServer(_T("www.tsingfun.com"), 9999);BT_SetSupportURL(_T("http://www.tsingfun.com"));// 最新的Log文件附上TCHAR szLogFile[MAX_PATH] = { 0 };GetCurrentDirectory(MAX_PATH, szLogFile);SYSTEMTIME sys;GetLocalTime(&sys);_stprintf_s(szLogFile, _T("%s\\logs\\%4d%02d%02d.log"), szLogFile, sys.wYear, sys.wMonth, sys.wDay);BT_AddLogFile(szLogFile);//自动保存crash文件//BT_SetReportFilePath(_T("crash"));//BT_SetActivityType(BTA_SAVEREPORT);
}// Windows下感知程序崩溃的方法有3个核心的函数,分别如下:
// SetUnhandledExceptionFilter (HandleException)确定出现没有控制的异常发生时调用HandleException.
// _set_invalid_parameter_handler(HandleInvalidParameter)确定出现无效参数调用发生时调用HandleInvalidParameter.
// _set_purecall_handler (HandlePureVirtualCall)确定纯虚函数调用发生时调用HandlePureVirtualCall.// Example: SetUnhandledExceptionFilter(TFUnhandledExceptionFilter); *((int*)0x0) = 0;LONG WINAPI MyUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionPointers)
{LOG_TRACER();SetupExceptionHandler();return EXCEPTION_CONTINUE_EXECUTION;
}
若不想弹出崩溃信息对话框,直接将崩溃包保存文件,只需将上述代码改为:
static void SetupExceptionHandler()
{LOG_TRACER();BT_InstallSehFilter();// 配置信息BT_SetAppName(_T("MarketInfo"));//自动保存crash文件BT_SetReportFilePath(_T("crash"));BT_SetActivityType(BTA_SAVEREPORT);
}
生成崩溃zip包如下(dmp是zip解压出来的):
双击dmp文件,使用vs打开:
进行调试,如下:
这样便可还原崩溃现场,进行跟踪调试快速找出bug。
英文资料请参见:《 Catch All Bugs with BugTrap! 》
BugTrap服务器端开发配置方法请继续参见清泛网相关博文。
BugTrap:程序崩溃快照、bug跟踪之利器相关推荐
- Linux C/C++程序崩溃bug调试方法
C,C++程序最常见的崩溃问题就是内存问题,内存越界,访问空指针,野指针等都会造成程序崩溃.Linux系统中当程序运行过程中出现非法操作,系统会先发送对应的错误信号,每种错误信号都有默认的处理方式,比 ...
- Go程序崩溃现场应该如何保留?
Go 程序突然莫名崩溃后,当日志记录没有覆盖到错误场景时,还有别的方法排查吗? 没有消灭一切的银弹,也没有可以保证永不出错的程序.我们应当如何捕捉 Go 程序错误?我想同学们的第一反应是:打日志. 但 ...
- [异常特工]android常见bug跟踪
前言 对app的线上bug的收集(友盟.云捕等)有时会得到这样的异常堆栈信息:没有一行代码是有关自身程序代码的.这使得对bug的解决无从下手,根据经验,内存不足OOM,Dialog关闭,ListVie ...
- C ++标准是否允许未初始化的bool使程序崩溃?
本文翻译自:Does the C++ standard allow for an uninitialized bool to crash a program? I know that an " ...
- 当程序崩溃的时候怎么办 part-1 Iven 本文由 大侠自来也
当程序崩溃的时候怎么办 part-1 Iven 2012-04-15 14:23 16条评论 543 人围观 分享到:-- 当程序崩溃的时候怎么办 本文由 大侠自来也 翻译( ...
- 项目管理大法归档 - 思维导图、原型工具、接口测试、设计模式、版本管理、单元测试、持续集成、代码审查、Bug 跟踪
项目管理大法归档 - 思维导图.原型工具.接口测试.设计模式.版本管理.单元测试.持续集成.代码审查.Bug 跟踪 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) ...
- bug生命周期bug跟踪处理
一.BUG BUG:软件的缺陷 1.BUG的定义:----与软件测试的目的对应 软件的BUG,狭义概念是指软件程序的漏洞或缺陷,广义概念除此之外还包括测试工程师或用户所发现和提出的软件可改进的细节.或 ...
- iOS之程序崩溃解决
这么多人发帖子,我也来凑个热闹,虽然是转载的,不过真的挺好用的. from:http://article.ityran.com/archi ...
- android查找邮件程序,Android 程序崩溃日志邮件获取
版权声明:本文为博主原创文章,未经博主允许不得转载. 在我们开发Android应用程序的时候,BUG的出现是难以避免的,时不时还会出现崩溃的情况,这个时候,我们急需知道造成问题的原因是什么,但是,在没 ...
最新文章
- VS2010非永久性配置和永久配置Opencv
- 两个时间计算毫秒在线_SPL 的日期时间函数(下)
- Android系统中的任意文件读写方法
- NYOJ 514 1的个数
- [字符串] --- 字符串的排列(剑指 Offer 38)
- IOS第七天(2:UiTableView 加上数据分离)
- 关于javafx支持IOS、android等智能手机解决方案
- spring的事务回滚机制,事务原理
- 手机连接蓝牙扫码枪_如何正确使用蓝牙扫描枪
- 图层蒙版和图层剪贴路径_PS蒙版解读:快速蒙版、图层蒙版、剪贴蒙版、矢量蒙版(二)...
- php revel,Revel命令行工具源码阅读
- 用20行代码读懂复仇者联盟的人物关系(无剧透)
- 毕业设计-基于微信小程序的图书馆咨询服务系统
- 青软新获「2022年度山东省软件和信息技术服务业综合竞争力百强企业」等三项荣誉!
- 易软通WMS仓储管理系统介绍
- idea合并分支代码怎么操作呢?
- C/C++面试题-1
- Docker学习01---狂神说
- 2018.05.29 讨厌培训机构
- (很全)英文外贸网站从建站到推广流程,外贸企业SEOer大菜鸟分享
热门文章
- 使用Golang语言的分金币作业 你有50枚金币,需要分配给以下几个人:Matthew,Sarah,Augustus,Heidi,Emilie,Peter,Giana,Adriano,Aaro
- 第一部分 思科九年 一(4)
- 团队交流合作简单解决方案:TeamViewer远程控制amp;会议演示 + HyperCam屏幕录制(免费)
- UC研发团队——开发你的人生(11月2日更新版)
- 疫情期间,如何花样开智能锁
- 如何在execl中制作列与列错开的表格?
- 超声波传感器四大检测方法详解
- eclipse java neon,Eclipse Jee Neon 64位
- 新书推荐:《福格行为模型》
- Python抓取第一网贷中国网贷理财每日收益率指数