C++/Qt/Qml程序使用Camel_CrashReport捕获异常崩溃并定位问题代码行
来源:互联网 发布:python 访问局域网 编辑:程序博客网 时间:2024/06/05 22:44
组件介绍:
Camel_CrashReport:
程序异常崩溃时生成Dump文件和日志, 非开源 属于CamelSoft系列基础开发组件.
Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。
支持平台:Windows
CamelCrashReportTest: 崩溃报告开发组件测试程序
Camel_CrashReport的调用非常简单, 提供了三个接口:
int Cls_funCrashReportInitialize();//初始化
int Cls_funCrashReportTerminate();//销毁
int Cls_funGetException(PEXCEPTION_POINTERS pExceptPtrs, WORD srtParam);//捕获崩溃
首先引用接口文件和定义函数指针, 这是加载dll动态库的过程
//Camel_CrashReport函数指针#include <Windows.h>#include "../../include/CamelCrashReportDll/Camel_CrashReport.h"HINSTANCE hCrashReport;lpCls_funCrashReportInitialize funInitialize;lpCls_funCrashReportTerminate funTerminate;lpCls_funGetException funGetException;
然后初始化组件:
//初始化Camel_CrashReport hCrashReport = LoadLibrary(L"Camel_CrashReport.dll"); funInitialize = NULL; funGetException = NULL; funTerminate = NULL; if (hCrashReport != NULL) { funInitialize = (lpCls_funCrashReportInitialize)GetProcAddress( hCrashReport, "Cls_funCrashReportInitialize"); funGetException = (lpCls_funGetException)GetProcAddress( hCrashReport, "Cls_funGetException"); funTerminate = (lpCls_funCrashReportTerminate)GetProcAddress( hCrashReport, "Cls_funCrashReportTerminate"); funInitialize(); }
使用__try __except 包裹主函数
__try {#endif init(argc, argv);#ifdef WIN32 } __except (funGetException( GetExceptionInformation(), clsCrashReport_intParam_Normal)) { ; }
程序执行结束时卸载组件
if (hCrashReport != NULL) { funTerminate(); funInitialize = NULL; funGetException = NULL; funTerminate = NULL; FreeLibrary(hCrashReport); hCrashReport = NULL; }
就这三步就ok了
然后程序运行时, 执行异常崩溃的代码 就会触发写dump文件和日志的过程
//运行异常代码 char* chr = NULL; memset(chr, 0, 10);
生成的dump文件可以直接用VS打开并调试
异常崩溃时生成的dump文件, 在VisualStudio下调试直接定位到代码行, 当然也可以使用WinDbg调试
生成的txt日志文件包含很多有用的信息
注意: 如果是Qt/Qml工程要正确的定位到崩溃代码行, 工程需要使用VisualStudio编译
参看 Qt/Qml工程转VS工程
需要完整代码请访问Camel_FileManagerCExamples
阅读全文
0 0
- C++/Qt/Qml程序使用Camel_CrashReport捕获异常崩溃并定位问题代码行
- 捕获程序崩溃异常
- WPF异常捕获,并使程序不崩溃!
- 使用MAP文件快速定位程序崩溃代码行
- 使用MAP文件快速定位程序崩溃代码行
- 使用MAP文件快速定位程序崩溃代码行
- 使用MAP文件快速定位程序崩溃代码行
- 使用MAP文件快速定位程序崩溃代码行
- 使用MAP文件快速定位程序崩溃代码行
- 使用MAP文件定位程序崩溃代码行
- 使用MAP文件快速定位程序崩溃代码行
- 使用MAP文件快速定位程序崩溃代码行
- 使用MAP文件快速定位程序崩溃代码行
- 使用map文件快速定位程序崩溃代码行
- 使用MAP文件快速定位程序崩溃代码行
- 使用MAP文件快速定位程序崩溃代码行
- dump文件定位程序崩溃代码行
- 关于捕获崩溃异常并保持记录
- JAVA | 40
- WEB页面_页面分页加筛选条件,显示列表信息(将分页信息和筛选信息一起提交)
- 信息安全概论总结-6
- AndroidStudio遇到的java.util.concurrent.ExecutionException:com.android.ide.common.process.ProcessExce问题
- jQuery预习资料
- C++/Qt/Qml程序使用Camel_CrashReport捕获异常崩溃并定位问题代码行
- ActiveMQ学习总结——(一)CentOS 7安装ActiveMQ-5.15.2
- float与十六进制字符串互转
- HDU 1251 统计难题【字典树】
- String、StringBuffer和StringBuilder
- 关于如何把支持VS2015的插件BabeLua改成支持VS2017
- 计算机专业必读书籍
- 4.jquery操作样式
- 浅谈:java 中Thread 和runable的区别