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服务器端开发配置方法请继续参见清泛网相关博文。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值