关于CrashRpt的研究

CrashRpt是轻量级的开源错误报告库

  • 官网
  • 下载链接


    ##编译工程
    从官网下载下最新版(v.1.4.3_r1645),解压后发现是visual studio的工程,使用的是vs2010。但我用得是vs2017,所以在编译之前要做一下处理:
    工程设置
    对于每一个项目,把项目常规属性的windows SDK 版本和平台工具集改成自己VS对应的版本
    然后重新生成解决方案,即可编译通过。
    如果遇到字符集有关的问题,也可以在这里一并修改。


    ##搭建报告接收服务端
    在\reporting\scripts路径下,有名为crashrpt.php的接收脚本。
    用记事本打开,对$file_root的值进行修改,指向要保存报告的文件夹。
    在linux服务器上搭建php服务器,把脚本放到服务器上。

##运行Demo
这里仅对MFCDemo做测试。
打开MFCDemo项目,找到MFCDemo.cpp,再找到CMFCDemoApp::Run()函数。

  // Install crash reporting

  CR_INSTALL_INFO info;
  memset(&info, 0, sizeof(CR_INSTALL_INFO));
  info.cb = sizeof(CR_INSTALL_INFO);
  info.pszAppName = _T("MFCDemo"); // Define application name.
  info.pszAppVersion = _T("1.0.0"); // Define application version.
  // URL for sending error reports over HTTP.
  info.pszUrl = _T("http://192.168.1.100/crashrpt.php");
  // Install all available exception handlers.
  info.dwFlags |= CR_INST_ALL_POSSIBLE_HANDLERS;
  // Provide privacy policy URL
  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 1;
  }

这段代码就是CrashRpt的初始化代码CR_INSTALL_INFO info则是初始化信息。
把info.pszUrl改为我们刚刚搭建的服务器地址,重新编译工程。

然后直接在bin文件夹中找到编译好的MFCDemo.exe。双击运行,新建文档再保存,会遇到内置的空指针异常崩溃。然后弹出CrashRpt对话框
这里写图片描述
点击发送报告,就可以在服务器上接收到错误报告了


##报告分析

###dmp文件
如果是visual studio生成的程序,无论是exe还是dll,都会随之生成一个和程序名相同的PDB文件。只要有PDB,结合dump就能进行错误调试。把dump文件、exe文件、pdb文件放到一起,用VS打开dmp文件运行调试,就能看的错误的位置,调用函数堆栈,各种变量等等。

  • 如果没有PDB文件,那就只能看到错误发生的汇编地址,以及各堆栈地址,无法查看函数名,变量值等信息。

###postprocess.bat

实际使用时,我们通常会收到不止一份错误报告,有可能是几百份、几千份,甚至几万份。而这些报告里则很有可能只集中在几个错误上。为了解决这个问题,官方工程内还提供了一个分类脚本。

#####使用方式
如果上一节完成过对工程的编译,在输出文件夹里,能找到名为crprober.exe的程序,这是一个命令行程序,具体使用方式参见命令行crprober /?

在processing\scripts\文件夹下找到postprocess.bat,用文本编辑器打开它,将字段值改成符合自己机器环境的设置。

字段名说明
INPUT_DIR要处理的报告文件夹
INPUT_FILE_PATTERN过滤类型
ACCEPTABLE_APPNAME过滤工程名
ACCEPTABLE_APPVERSION过滤版本
SYM_SEARCH_DIRSPDB文件目录
SAVE_RESULTS_TO_DIR输出结果文件夹
SAVE_INVALID_REPORTS_TO_DIR报告文件存放处
CRPROBER_PATHcrprober.exe所在目录

注意:

  • 没有pdb文件的话,分类会很不准确;
  • 分类时要注意填正确写对应的版本号;

###basic_stats.py
没啥用的脚本,对postprocess.bat分类后的文件夹进行统计分析,生成报告。可 用于确定错误报告的分布情况,确定优先需要解决的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值