程序崩溃后如何更好的反馈信息

我们使用Windows都知道,整个Windows和微软提供的应用软件的稳定性和崩溃后的体验是逐步提升的。在大牛的作品《软件调试》 中有描述。

在Windows下,软件出错,常见的报告手段:

1、事件日志:这里记录了很多关键的错误信息

2、崩溃报告:可以自动提交错误的信息,或者手动提交,以不断的改进软件和方便排错

3、专用的日志工具:如Netmon,sysinternal等

 

那我们的软件在崩溃后如何处理呢?主要目的:

1、方便我们的排错

2、提供更好的使用体验

最近在设计一个应用系统时对这个问题进行处理。

这方面有比较多的参考:

首先在stackoverflow上可以看到,c++ release  program crashes report 

http://stackoverflow.com/questions/112831/how-to-get-a-stack-trace-when-c-program-crashes-using-msvc8-2005

以上有比较多的框架和工具

Windows应用程序处理的一个框架和详细参考资料 

Integrating Crash Reporting into Your Application - A Beginners Tutorial

http://www.codeproject.com/Articles/308634/Integrating-Crash-Reporting-into-Your-Application

http://code.google.com/p/crashrpt/  

http://www.codeproject.com/Articles/1934/Post-Mortem-Debugging-Your-Application-with-Minidu 

Google breakPad

Google breakpad是一个非常实用的跨平台的崩溃转储和分析模块,他支持Windows,Linux和Mac和Solaris。由于他本身跨平台,所以很大的减少我们在平台移植时的工作,毕竟崩溃转储,每个平台下都不同,使用起来很难统一,而Google breakpad就帮我们做到了这一点,不管是哪个平台下的崩溃,都能够进行统一的分析。现在很多工程都在使用他:最著名的几个如Chrome,Firefox,Picasa和Google Earth。另外他的License是BSD的,也就是说,我们即便是在商业软件中使用,也是合法的 

 http://code.google.com/p/google-breakpad/ 

http://bigasp.com/archives/450 

 

 调试Release发布版程序的Crash错误

 http://www.cppblog.com/Walker/articles/146153.html

http://blog.sina.com.cn/s/blog_48f93b530100fsln.html 

 

对于托管程序也有 Good crash reporting library in c#

http://stackoverflow.com/questions/49224/good-crash-reporting-library-in-c-sharp 

  

顺便看到了这个比较有意思的内容,35个你也许不知道的Google开源项目 http://www.enet.com.cn/article/2009/1228/A20091228592251.shtml 

 

由于我的应用 需要处理跨平台问题,因此使用了Google breakPad

顺便把整理的资料放在了skydriver上,   

https://skydrive.live.com/#cid=56B433AD3D1871E3&id=56B433AD3D1871E3%21427

https://skydrive.live.com/view.aspx?cid=56B433AD3D1871E3&resid=56B433AD3D1871E3%21433 

 

 

时间: 2024-10-27 10:28:42

程序崩溃后如何更好的反馈信息的相关文章

应用-程序崩溃后,dump分析不到具体原因?

问题描述 程序崩溃后,dump分析不到具体原因? 程序崩溃了,也用windbg抓取了dump文件,但是使用windbg分析后发现找不到问题点. 我用的是c#编写的程序,source code和pdb文件不知道如何挂在windbg上去.请大侠帮忙看下. FAULTING_IP: System_Windows_Forms_ni+3329bb 000007fe`e83829bb 498b03 mov rax,qword ptr [r11] EXCEPTION_RECORD: fffffffffffff

c++-程序崩溃后产生的Dump为什么有时是空的,大小为0kb

问题描述 程序崩溃后产生的Dump为什么有时是空的,大小为0kb C++ 写的程序有设置SetUnhandledExceptionFilter,而且崩溃时有时也可产生dump文件,但为什么有时候却产生0kb大小的dump文件?求解!!! 解决方案 http://bbs.csdn.net/topics/390831906 历史上有人问过这个问题呢- 解决方案二: http://bbs.csdn.net/topics/390831906

android程序崩溃后重启

有时候由于测试不充分或者程序潜在的问题而导致程序异常崩溃,这个是令人无法接受的,在android中怎样捕获程序的异常崩溃,然后进行一些必要的处理或重新启动 应用这个问题困恼了我很久,今天终于解决了该问题,写篇文章记录一下. 首先捕获程序崩溃的异常就必须了解一下java中UncaughtExceptionHandler这个接口,android沿用了此接口,在android API中: 通过实现此接口,能够处理线程被一个无法捕捉的异常所终止的情况.如上所述的情况,handler将会报告线程终止和不明

Linux下程序崩溃,ulimit,coredump,gdbserver

操作系统:Ubuntu10.04 前言:    在程序崩溃后,如何快速定位问题.    以下方法适用于开发调试阶段,不太适用成品.    本文着眼于嵌入式,PC方面更简单.    核心:gdbserver + coredump 一,安装,配置,使用 gdbserver    arm linux下安装gdb,gdbserver调试器 二,启动 coredump    linux下ulimit命令下的coredump  三,实例    1,源码 点击(此处)折叠或打开 #include <stdio

求助!!!程序退出后能收到信息但不知道在哪里处理头像和昵称导致打开聊天界面是注册号~~~

问题描述 程序退出后在后台有检测到信息 解决方案 http://www.imgeek.org/article/825307638看下这个链接

java-调用 getStringArray 后 android 程序崩溃

问题描述 调用 getStringArray 后 android 程序崩溃 程序出现了下面的错误,在 emulator中奔溃了.现在还不确定什么问题. Logcat: E/AndroidRuntime( 1928): FATAL EXCEPTION: main E/AndroidRuntime( 1928): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.packtpub.kitchendroid/c

临界区 多线程 崩溃-临界区 使用sleep后程序崩溃

问题描述 临界区 使用sleep后程序崩溃 m_list1,m_list2,是映射的两个listbox的控件变量,在sleep后崩溃,刚开始以为时间设置小了,调整到1000,还是崩溃,敬请各位大牛指点小弟......代码如下:int nTiecks =30;HANDLE hthread1hthread2;CRITICAL_SECTION cs; DWORD WINAPI Threadproc1(LPVOID p){ CThread2Dlg pDlg = (CThread2Dlg) p; whil

c++-C++矩阵乘法-输入第二个矩阵数据后程序崩溃?

问题描述 C++矩阵乘法-输入第二个矩阵数据后程序崩溃? //初始化第二个矩阵的数据后程序崩溃了?为什么呢? #include using namespace std; int main() { a: int m,n,r,c; cout<<"请输入第一个矩阵的行与列"< cin>>m>>n; cout<<"请输入第二个矩阵的行与列"< cin>>r>>c; if(n!=r) { co

sqlite-运行 SQLite 数据库后程序崩溃

问题描述 运行 SQLite 数据库后程序崩溃 我设计的是查询数据库后下面的程序段返回一个数组.但是现在运行下面的程序时,奔溃了 //info 是类型数据中对象的名字 info.open(); String[] data = info.queryAll(); info.close(); 数据库代码部分,我想检索某一列中所有数据库的行 public String[] queryAll() { String[] columns = new String[] { KEY_NAME }; Cursor