C++ 应用处理异常崩溃(转载)

有时,在我们的程序运行的时候,会遇到一些崩溃问题,尤其是概率出现的时候,如果能捕获其异常,那么对于我们快速定位bug是很有帮助的

这里借用网上搜寻回来的函数,记录一下:

头文件及库:

1 #include <dbghelp.h>
2 #pragma comment ( lib, "dbghelp.lib" )
 1 wstring GetPresentTime()
 2 {
 3     SYSTEMTIME time;
 4     GetLocalTime(&time);
 5
 6     TCHAR wszTime[128];
 7     swprintf_s(wszTime, _T("%04d-%02d-%02d %02d-%02d-%02d-%03d"), time.wYear, time.wMonth, time.wDay, time.wHour, time.wMinute, time.wSecond, time.wMilliseconds);
 8
 9     return wstring(wszTime);
10 }
11
12 void CreateDumpFile(LPCWSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException)
13 {
14     // 创建Dump文件
15     //
16     HANDLE hDumpFile = CreateFile(lpstrDumpFilePathName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
17
18     // Dump信息
19     //
20     MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
21     dumpInfo.ExceptionPointers = pException;
22     dumpInfo.ThreadId = GetCurrentThreadId();
23     dumpInfo.ClientPointers = TRUE;
24
25     // 写入Dump文件内容
26     //
27     MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);
28
29     CloseHandle(hDumpFile);
30 }
31
32 LONG CallBackCrashHandler(EXCEPTION_POINTERS *pException)
33 {
34     MessageBox(NULL,L"你的程序 遇到一个错误,已停止运行,请重新启动",L"错误",MB_OK);
35
36     // 以当前时间为文件名
37     //
38     TCHAR szModuleDir[128];
39     DWORD dwLength=GetModuleFileName(NULL,szModuleDir,128);
40
41     for(DWORD dw=dwLength-1;dw>0;dw--)
42     {
43         if(szModuleDir[dw]==‘\\‘)
44         {
45             szModuleDir[dw+1]=0;
46             break;
47         }
48     }
49
50     wstring strDumpFileName = szModuleDir + GetPresentTime() +_T(".dmp");
51
52     // 创建Dump文件
53     //
54     CreateDumpFile(strDumpFileName.data(), pException);
55
56     return EXCEPTION_EXECUTE_HANDLER;
57 }  

调用:

SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)CallBackCrashHandler);

也许有些bug不能抓到,例如刚开始的一些初始化信息时的异常,不过大部分还是可以的

会提供小小的帮助。

时间: 2024-12-08 08:17:52

C++ 应用处理异常崩溃(转载)的相关文章

Android开发:StaggeredGridView瀑布流控件运行异常崩溃解决方法

StaggeredGridView是github上一个开源的瀑布流图片库,本文将分享集成StaggeredGridView时碰到的异常以及解决方法,StaggeredGriedView开源地址为:https://github.com/maurycyw/StaggeredGridView. StaggeredGriedViewDemo运行报错异常为: java.lang.RuntimeException: Unable to start activity  ComponentInfo{com.ex

Qt程式异常崩溃处理技巧(Win)

这篇文章谈的是 Qt4 程式在视窗系统下的异常崩溃处理技巧,所以需要在头文件中包含"#include <Windows.h>". 首先,程式难免会有异常崩溃的时候,重要的是在崩溃时能及时把重要的数据保存好,将损失降低. SetUnhandledExceptionFilter函数是Win32API的异常捕获函数,在程式异常结束前,会调用该函数注册的回调函数,这样就能在进程终止前执行指定的代码,达到例如保存数据的功能. LONG ApplicationCrashHandler(

【有意思的BUG】客户端无厘头 已连网的场景初始化太慢 未连网的场景异常崩溃

客户端 已连网的场景初始化太慢 当在未连接internet的时候,打开某些APP,会比较迅速地初始化进入到主页面. 但是当我在已经连接了internet的时候,打开某些APP,有些会初始化很久!!!! 举例1: 已经连接了internet的时候,打开网易有道词典. 这时候,客户端从“网易有道词典封面页”跳转到“搜词页”,此时尝试触屏去点击搜索输入框区域是无效的,因为页面正在等待服务器的响应,这个等待时间太久了,短则5-10秒,长则20秒. 不知道设计者有没有考虑“英文词典”这类软件的使用场景?当

(二十)Android中处理崩溃异常(转载:http://blog.csdn.net/liuhe688/article/details/6584143)

大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了崩溃现象,开发者应该及时获取在该设备上导致崩溃的信息,这对于下一个版本的bug修复帮助极大,所以今天就来介绍一下如何在程序崩溃的情况下收集相关的设备参数信息和具体的异常信息,并发送这些信息到服务器供开发者分析和调试程序. 我们先建立一个crash项目,项目结构如图: 在MainActivity.ja

python使用异步任务celery出现异常崩溃时retry重试

前言: python下的celery是啥东西大家应该有了解,是一个异步的任务框架 .话说,  我以前写过一个报警平台的项目,也需要任务的扩展成分布式,当时总是觉得 用celery不是那么太靠谱,所以就自己写了一个分布式的任务派发的系统. 今个和朋友聊起了分布式爬虫,这哥们说 任务有时候经常的崩溃,但是celery的retry的机制有些意思,最后看了下文档  ,又研究了下retry的参数,然后把自己的一些实战分享给大家. #xiaorui.cc @celery.task(bind=True,max

调试WebView出现数据库异常(转载)

Android上面有一个经常会在线上Crash中发现的非必现异常:SQLiteException这个异常不少人在使用WebView的时候碰到过,它非必现,概率不高,你通常会在线上Crash报告中才会发现它.原因众说纷纭. 这里给两个触发场景:1.SQLite为了保护db文件一致性,当访问db文件时,会给文件上一个进程锁,这种情况下,如果有另外一个进程再访问这个db文件,就会出错了. 所以,你肯定想到了,你的APK如果满足以下两个条件会触发这个异常: 1.使用了WebView 2.使用了多个进程.

理解和解决Java并发修改异常ConcurrentModificationException(转载)

原文地址:https://www.jianshu.com/p/f3f6b12330c1 理解和解决Java并发修改异常ConcurrentModificationException 不知读者在Java开发的过程中有没有遇到类似的异常信息 Exception in thread "main" java.util.ConcurrentModificationException, 下面小编简单介绍异常原因以及这种异常的改进方法,内容很简单,有什么问题还望指正. 假设我们要实现这样一个例子:

flume异常崩溃 File has been modified since being read

日志采集异常,生产报错误日志: (org.apache.flume.source.SpoolDirectorySource$SpoolDirectoryRunnable.run:280) - FATAL: Spool Directory source spool_source: { spoolDir: /apps/logs/libra }: Uncaught exception in SpoolDirectorySource thread. Restart orreconfigure Flume

监听软件异常崩溃并且保持日志

总⒕Α矽 眍读畈 憷纣偕⑼ 镆璁演屺 嘘泉殪稷 螫フ玟 浞ⅹ偬嵝 偻垦赦 不行连犹豫都没有口就回绝了在这边还要雷俊风等人盯着 破味脆蜴 禺骣赴 し浅 罡攀 加历荒哕 觅裤┗苠 ε断奏琢 泽镦歆 垮圭镎 璧黏柿餮 鏊淞蓬 惭萍狗斜 ┃勿淫 ぞ踔勉 棠增锓 痂Μ泸 跞醺叽疙 尺怿万 镓椅赇狷 逄龆颞 苷蕲署エ 其他人等网绞上来后就在甲板上收鱼那时依然要过来帮手 Ⅵ沟避b 菟摘崭 绵矩湄哨 虚解赇蹭 芯ま导 舂鹏瘳汲 钦点了悲酥清风作为团长不过当千 焰甭馈 萨