屏蔽runtime error等错误的弹出框

来源:互联网 发布:江苏减招事件知乎 编辑:程序博客网 时间:2024/06/02 09:01

1. 为了在崩溃时能生成dump文件,需要将"DbgHelp.Lib/DbgHelp.h/DbgHelp.dll"拷贝到工程目录并把DbgHelp.h加到工程中。

#include "Dbghelp.h"#pragma auto_inline (off)#pragma comment( lib, "DbgHelp" )

2. 定义自己的异常处理回调函数

LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo){    HANDLE lhDumpFile = CreateFile(_T("CommSvr.dmp"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL ,NULL);        MINIDUMP_EXCEPTION_INFORMATION loExceptionInfo;        loExceptionInfo.ExceptionPointers = ExceptionInfo;        loExceptionInfo.ThreadId = GetCurrentThreadId();        loExceptionInfo.ClientPointers = TRUE;        MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),lhDumpFile, MiniDumpNormal, &loExceptionInfo, NULL, NULL);        CloseHandle(lhDumpFile);        return EXCEPTION_EXECUTE_HANDLER;<pre name="code" class="cpp">    //EXCEPTION_EXECUTE_HANDLER equ 1 表示我已经处理了异常,可以优雅地结束了     //EXCEPTION_CONTINUE_SEARCH equ 0 表示我不处理,其他人来吧,于是windows调用默认的处理程序显示一个错误框,并结束     //EXCEPTION_CONTINUE_EXECUTION equ -1 表示错误已经被修复,请从异常发生处继续执行  
}
3.在InitInstance的开始处调用,(不一定最开始处,但尽量往前放)

    SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);     // 这个方式在dll中没有意义,因为屏蔽不了dll调用者的错误框,也产生不了dump文件


另外加上这句,要不框还是弹
SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);

4.如何分析生成的dump文件

通常在荡机的瞬间,操作系统会形成一个存储器转储文件。 这个文件是当计算机死机的瞬间的内存的映像.该文件通常放置在系统目录下的minidum目录下.例如 C:/WINDOWS/Minidump/Mini082106-01.dmp. 所以对该文件的分析就能很快查找到问题的所在.  这个文件打开看看将发现是一堆乱码.怎么分析该文件呢.通常我们使用 microsoft 提供的 WinDbg 工具来分析.这个工具可以从网站上下载得到.:dbg_x86_6.7.05.0.exe

   
  当安装这个工具后,则就可以使用 WinDbg 来对 mimidump文件进行分析了.打开WinDbg ,首先要设置符号文件路径.符号文件是用来分析错误原因位置信息的文件.这个文件可以从  的网站随着WinDbg 一起下载,当然了比较大了.如果你不愿意下载,则可以设置连接到网站上的地址就可以了.我通常采用这种方法.
  设置符号文件的地址: 在WinDbg 的菜单中: File--> Symbol File Path 中,设置 :
SRV*DownstreamStore*http://msdl.microsoft.com/download/symbols ,

 
然后就可以打开 minidump文件进行分析了 .  File--> Open Crash Dump , ,例如打开 C:/WINDOWS/Minidump/Mini082106-01.dmp .等待一会,根据前面设置的符号文件的地址,windbg 连接到 microsoft 的网站,得到符号信息.

 


这个时候 在WinDbg 下面的命令行运行: !analyze -v 将得到详细的信息.


0 0
原创粉丝点击