【异常处理】MFC程序崩溃的友好处理

软件总存在这样或者那样的bug。

虽然测试员已经在很努力的寻找问题,程序员也在汗流浃背的除虫,但是总会有一些情况被遗漏或者不可预测,比如用户的硬件环境、 络状况、操作系统差异等等,不一而足。而导致的结果则是弹出下面这样一个让用户摸不着头脑又恼火的提示,然后崩溃掉,令程序员尴尬不已。

 

而在一些成熟的软件产品中,程序崩溃时我们看到的却是另外一番画面,比如QQ:

 

又比如迅雷:

 

你也想让你的程序拥有友好的崩溃界面,降低用户生气的能量,并且收集一些必要的信息进行调试,来完善你的程序吗果你是MFC程序猿,请继续围观,其他猿类请自行无视,并寻找适合你的猿粪。

毫无疑问,电驴是一款优秀的软件,并且在它华丽的外表下还有一副强壮的身体。它的代码有非常优秀。它是基于MFC开发的开源程序,需要源代码的同学请猛击这里 https://github.com/baloonwj/easyMule 下载。

上面这幅图就是电驴的源代码包,我们要用到的就是那个被我选中的“CrashReporter”,它是一个独立的工程,我们只需要根据需要做一些修改然后直接编译即可。

另外我们还需要位于srcWorkLayer目录下的mdump.h和mdump.cpp,把这两个文件拷贝并加到你的工程里,然后把mdump.cpp里的下面这行去掉:

#include “CheckConflict.h”    //ADDED by fengwen on 2006/12/25    : 检测已知的第三方软件冲突。

 

try
{
    //ADDED by fengwen on 2006/12/25     :    检测第三方软件冲突。
    CCheckConflict    cc;
    if (cc.CheckConflict(pExceptionInfo))
    {
        ExitProcess(1);
    }
    //ADDED by fengwen on 2006/12/25     :    检测第三方软件冲突。
}
catch(…)
{
}

 

最后一步,在主程序框架类里添加:

#include “mdump.h”

再到InitInstance函数里添加下面的代码:

theCrashDumper.Enable(_T(“YourApp 1.0″), false);

好了,大功告成,现在编译你的程序,在合适的地方增加测试代码就可以实验效果了。比如下面这两行代码会让你的程序立即崩溃:

int* pt = 0;
*(pt+1) = 5;

怎么样,效果还不错吧个程序除了拦截进程异常,还能够将异常的相关信息生成文件,然后上传到你指定的服务器,供你分析调试。当然你需要修改CrashReporter工程HttpUploadFileProc.cpp文件HttpUploadFile函数里相关变量的值,否则就上传到到电驴的服务器了

 

最后再修改一下CrashReporter工程CrashReporter.cpp文件InitInstance函数里的下面这行代码:

ShellExecute(NULL, “open”, “eMule.exe”, NULL, NULL, SW_SHOW);

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年2月9日
下一篇 2019年2月9日

相关推荐