软件崩溃分析

代码示例展示了如何使用CrashRpt库在C++程序中处理崩溃,包括安装、配置和卸载崩溃报告系统。当程序触发AccessViolation错误时,它会生成日志并使用Windbg(64位)进行分析。通过!analyze-v命令进行调试。

有如下的代码,再这里使用crashrpt2分析

#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <stdarg.h>
#include "CrashRpt.h"

#ifdef DEBUG
#pragma comment(lib,"CrashRpt1500d.lib")
#else
#pragma comment(lib,"CrashRpt1500.lib")
#endif

BOOL InstallCrashRpt()
{
	//软件启动时初始化

	CR_INSTALL_INFO info;
	memset(&info, 0, sizeof(CR_INSTALL_INFO));
	info.cb = sizeof(CR_INSTALL_INFO);
	info.pszAppName = _T("Project5"); // Define application name.
	info.pszAppVersion = _T("1.0.0"); // Define application version.
	//info.pszCrashSenderPath = _T("…");//CrashSender.exe路径
	info.pszErrorReportSaveDir = _T(".\\ErrorReport\\");//保存错误报告的路径(本地堆栈生成的位置)

	info.dwFlags |= CR_INST_ALL_POSSIBLE_HANDLERS;//安装所有可能的异常处理程序
	info.dwFlags |= CR_INST_NO_GUI;//不显示奔溃提示框
	info.dwFlags |= CR_INST_DONT_SEND_REPORT;//不要发送邮件,保存到本地
	info.dwFlags |= CR_INST_STORE_ZIP_ARCHIVES;//生成堆栈压缩包
	
	info.pszUrl = _T("http://someserver.com/crashrpt.php");
	info.pszPrivacyPolicyURL = _T("http://someserver.com/privacy.html");
	
	int nResult = crInstall(&info);
	if (nResult != 0)
	{
		TCHAR buff[256];

		crGetLastErrorMsg(buff, 256);

		MessageBox(NULL, buff, _T("crInstall error"), MB_OK);

		return FALSE;
	}

	//截屏保存
	crAddScreenshot2(CR_AS_MAIN_WINDOW | CR_AS_USE_JPEG_FORMAT, 95);

	return TRUE;

}
// 卸载CrashRpt
void UninstallCrashRpt()
{
	// 在主线程退出前卸载CrashRpt
	crUninstall();
}

int _tmain(int argc, _TCHAR * argv[])
{
	// 安装CrashRpt
	if (!InstallCrashRpt())
		// 安装失败
		return 1;

	char n = getchar();
	if (n == 'a')
	{
		int* p = 0;
		*p = 0; // Access violation
	}

	// 退出时卸载CrashRpt
	UninstallCrashRpt();
	return 0;
}

输入a,然后回车就会崩溃,会生成日志,
在这里插入图片描述
在这里插入图片描述
然后使用windbg(64位),进行分析:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用命令分析:!analyze -v
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
69行有错误

CrashRpt2库下载
Windbg下载

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发如雪-ty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值