#CrashExporter
CrashExporter是基于开源项目crashrpt(https://code.google.com/p/crashrpt/) 基础上改造的、基于Windows平台的轻量级异常导出组件。
原crashrpt 主要将远端的崩溃信息压缩包通过网络发送到本地,而往往我们希望崩溃信息只在本地生成。同时crashrpt 没有生成我们感兴趣的堆栈打印文件。
CrashExporter
与crashrpt
的区别是:CrashExporter
只保留了crashrpt的导出dmp和抓屏功能,并增加了堆栈打印功能。
当程序崩溃后,会在程序执行的crashrpt目录下,增加一个以崩溃时间命名的文件夹。 文件夹里有三个文件:
主要是release工程的配置。 对于VC6工程:
对于vs2010工程:
你可以重写CWinApp::Run(),在Run函数里安装CrashExporter。代码类似如下:
int CYourApp::Run()
{
// Call your crInstall code here ...
BOOL bRun;
BOOL bExit=FALSE;
while(!bExit)
{
bRun= CWinApp::Run();
bExit=TRUE;
}
return bRun;
}
一般直接调用CrInstall即可获取所有线程异常信息。你也可以在每个线程的起始调用crInstallToCurrentThread来分别获取线程的异常信息,但是别忘记在线程退出是调用crUninstallFromCurrentThread。
这时候可以通过crGenerateErrorReport接口手动获取异常信息。
支持。 程序重启需要两个条件:
你至少需要打包进三个东西:
你可以在DLL程序初始化之前加载CrashExporter,比如DllMain()。 但是,调用DLL的主程序也可能加载了CrashExporter,这样情况下会屏蔽掉主线程的崩溃信息获取。这种冲突,就需要人为控制了,建议是在主程序中加载CrashExporter。
不会!因为CrashExporter不会在后台执行任何任务,也不会占用多余的内存。CrashExporter仅仅会在程序崩溃的时候被调用。但是,CrashExporter会延长异常程序退出时间,因为CrashExporter需要加载symbols,分析堆栈,写dmp和调用堆栈文件。
可以获取大多数常见的异常。 因为安全原因,微软是不允许我们拦截某些异常的。 还有一种情况: CPoint* pt = new CPoint; delete pt; delete pt; 这种是因为堆损坏引起的,这种情况有时候会导致程序立即崩溃,有时候却是可以继续工作。对于这种随机的异常,CrashExporter是不能获取的。 因此,我们建议删除指针内存时,采用这样类似宏。 #define SAFE_DELETE(ptr) { delete(ptr); (ptr)=NULL; }
一个可能的原因是你异常的程序连给CrashExporter分配资源的机会都没给,比如你程序中有一个循环递归。
有的。 当异常产生时,Crashrpt.dll需要检查异常指针的结构,这个指针结构一般由操作系统分配。但是,有时候这个指针结构会不存在(比如无效的参数),这时候Crashrpt.dll会根据当前CPU寄存器状态分配指针结构。这种情况下,你会在异常堆栈中跟踪到Crashrpt.dll了。
CrashExporter由两个core组成。分别为CrashRpt.dll 和 CrashExporter.exe。
CrashRpt.dll负责获取程序的异常信息并保存至共享内存;CrashExporter.exe负责从共享内存中获取异常信息,写dmp和堆栈调用文件、生成屏幕截屏。 这样做的目的是把容易出错的写文件等操作分离到CrashExporter.exe中,主程序只会加载CrashRpt.dll到其地址空间,这样减少了主程序因为CrashExporter出现异常的可能性。
CrashRpt.dll 和 CrashExporter.exe使用共享内存传递数据。
建议用MiniDumpNormal,因为MiniDumpNormal包含了我们感兴趣的每个线程堆栈信息。
程序访问了一块非法的内存地址(比如NULL指针).
在无限递归中,栈溢出.
大块数据被写入一片小缓冲区
C++类中的纯虚函数被调用
内存无法分配(内存不足)
向C++的系统函数中传入非法的参数
C运行库遇到错误,需要停止程序运行
主要有两种类型的异常:SEH异常(结构化异常处理)和标准C++异常
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型