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

被折叠的 条评论
为什么被折叠?



