关于CrashRpt的研究

article/2025/10/19 0:01:05

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 reportingCR_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 URLinfo.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分类后的文件夹进行统计分析,生成报告。可 用于确定错误报告的分布情况,确定优先需要解决的问题


http://chatgpt.dhexx.cn/article/thN3Wbw6.shtml

相关文章

C++接入CrashRpt并上报分析崩溃信息

项目需要监测在Windows平台的崩溃情况,折腾了两天终于弄好了,记录一下。 1.捕获崩溃信息 接到这个需求,心想应用崩溃系统会收到信号,应该有相应的函数可以监听,上网搜索,果不其然函数 SetUnhandledExcep…

计算机中丢失crashrpt,修复crashrpt.dll

crashrpt.dll是电脑系统必备的一个DLL组件修复程序。系统重要文件 crashrpt.dll 。crashrpt.dll(含64位)在电脑中起着重要作用。比如电脑中的部分软件的正常运行就离不开它,如果缺少这款dll,会给用户带来不少麻烦。一旦发现自己的电脑这款crashrpt.dll出…

计算机中丢失crashrpt,crashrpt.dll

crashrpt.dll是smartFTP中一款重要的dll文件,缺少它将导致软件的部分功能无法实现或者无法启动,如果计算机弹出crashrpt.dll丢失或者找不到crashrpt.dll的问题,下载一个crashrpt.dll文件修复一下即可解决问题,需要的朋友可以下载&…

crashrpt

今天原本打算在谷歌上搜索处理SEH的文章,以使我不需要在每一个线程中使用__try{}__except()代码块包裹代码的情况下,就能在任意线程抛出SEH时生成MiniDump文件。不过最后的结果是处理SEH的文章没有搜索出几篇,却幸运的搜索出了满足我需要的工…

Windows平台崩溃转储系统crashrpt的使用

概述 CrashRpt 是一个免费的、轻量级的开源错误报告库开源库,旨在拦截C程序中的异常,收集有关崩溃的技术信息并通过互联网向软件供应商发送错误报告,用于在 Microsoft Visual Studio IDE 中创建并在 Windows 中运行C应用程序。(不…

Android APK及签名

APK是AndroidPackage的缩写,即Android安装包(apk)。APK是类似Symbian Sis或Sisx的 文件格式。通过将APK文件直接传到 Android模拟器或Android手机中执行即可安装。apk文件和sis一样,把 android sdk编译的工程打包成一个安装程序文件,格式为ap…

安卓应用签名

安卓应用release模式是需要签名的,否则无法安装,debug模式不需要的 签名可以用keytool生成密钥文件,然后在build.gradle中指定即可。 一、生成密钥文件 keytool -genkey -alias noalias -keypass abcd1234 -keyalg RSA -keysize 2048 -valid…

Android为App签名(为apk签名)

写博客是一种快乐,前提是你有所写,与人分享,是另一种快乐,前提是你有舞台展示,CSDN就是这样的舞台。 这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但…

AndroidStudio应用签名

1、新建存放签名文件的文件夹 Build 2、初次没有账号 点击Create new 创建 3、签名成功后会在build。gradle 生成下面的数据 4、AS中调出黑窗口写入 keytool -list -v -keystore “L:/boxin/bx.jks” 签名地址 输入密码 5、找到MD5 SHA1 后面的密钥就是你的应用签名

android app签名详解

本文及文中图片转自:https://mp.weixin.qq.com/s?__bizMzIwMzYwMTk1NA&mid2247493825&idx1&sne926da39c6bd51397851d7e330d6ba24&chksm96ce498ca1b9c09a7865264b26eadcf27bd012e9acc999b3eb3ca5c440266642763b6be27416&mpshare1&scene23&a…

Android应用签名之AS签名

废话不多说直接上图 如之前未生成jks文件则,点击create new .. 这里只要输入几个必要项 Key store path(生产key文件的保存路径 ) Key store password(key 存储密码) Key alias(key别名) Key p…

安卓应用程序的签名

签名安卓应用程序 Android应用以它的包名作为唯一标识。如果在同一部手机上安装两个包名相同的应用,后面安装的应用就会覆盖前面安装的应用。为了避免这种情况的发生,Android要求对作为产品发布的应用进行签名。 签名主要有如下两个作用: 1.确…

android app签名方法

1、生成签名文件 在android studio 里操作如下: 填完即可。 会产生这个签名文件。 2、签名app 到jdk的bin文件夹下输入下面命令: jarsigner -verbose -keystore D:\appkey\geming.jks D:\svn\Bigdata\IOT\iot-village-app\village\platforms\android\…

Android应用签名

为了要签名? 开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的。 由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序&#xff0c…

Android App签名

Andriod应用程序如果要在手机或模拟器上安装,必须要有签名! 1.签名的意义   为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一…

Android开发给apk签名

前言 最近360加固助手签名突然收费了,加固完后要自己签名了。在此记录一下自己使用命令行签名步骤。 之后又更新了加固助手,点击自动签名提示如下: 之前没提示工具包手动签名,平时也就加固下应用,也没太注意工具包&…

Andorid进行签名的方式

目录 Android签名的简介 1.Android签名的作用 2.签名的方式 2.1签名方式的比较 3.在AS上操作的一般步骤(手动签名) 3.1 在AS操作步骤如下图 4.apk常用的签名方法(系统签名)有两种 4.1 使用工具对apk进行签名 4.2 在Ubuntu系统下,通过命令行进行签名 Androi…

Android APP的签名

Android APP的签名 Android项目以它的包名作为唯一的标识,如果在同一部手机上安装两个包名相同的APP,后者就会覆盖前面安装的应用。为了避免Android APP被随意覆盖,Android要求对APP进行签名。下面介绍对APP进行签名的步骤 1、选择builder菜…

keil中c语言定义数组,如题,KeilC51位变量能不能定义数组

公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解。 话题:如题,KeilC51位变量能不能定义数组回答:试试呗我的结论是不行 会报错 error C168: array of bit 手册描述:An array may not have type bi…

【C 语言】数组 ( 数组类型表达 | 定义数组类型 )

文章目录 总结一、数组类型表达二、定义数组类型三、代码示例 总结 // 定义类数组数据类型 int [10] , 类型别名为 ArrayTypetypedef int (ArrayType)[10];// 与 int array[10] {0}; 作用相同ArrayType array2 {0};一、数组类型表达 C 语言中的 数据类型 分为 基础数据类型 ,…