关于VC异常捕获的一个问题:

关于VC异常捕获的一个问题:
发信站: 水木社区 (Thu Sep 13 18:25:57 2007), 站内

关于VC异常捕获的一个问题:
在MFC中如何用一个函数捕获所有异常,在有异常的时候能转到自己的处理程序,比如显示程序的当前堆栈及寄存器信息。
现在的问题是:
1.我发现try语句会漏掉一些异常
2.MFC中异常我只知道在每个相关函数中加入异常捕获的代码,感觉这种方式太麻烦了。
我就想就修改一处地方便可以捕获所有异常,请问该怎么做呢?
多谢!

处理结构化异常SetUnhandledExceptionFilter    
先在程序初始化的时候 设置 回调函数,回调函数对应有处理程序,处理程序会把dump到的内存堆栈保存下来。

然后用该堆栈就可调试了。

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    hInst = hInstance;
    ::SetUnhandledExceptionFilter(UEFilter);
}

LONG WINAPI UEFilter(PEXCEPTION_POINTERS ExceptionInfo)
{
    // make up crash handler app name
    char szFileName[_MAX_PATH];
    ::GetModuleFileName(NULL, szFileName, _MAX_PATH);

    std::string strFileName;
    std::string strFilePath;
    ::SplitFileName(szFileName, strFileName, strFilePath);

    strFilePath += "CrashHandler.exe";

    // make up share memory name

    DWORD dwTick = ::GetTickCount();
    char szMapFileName[256];
    _snprintf(szMapFileName, 256, "%s%d", strFileName.c_str(), dwTick);

    CrashAdapter::Handle(strFilePath.c_str(), szMapFileName, ExceptionInfo);

    return EXCEPTION_EXECUTE_HANDLER;
}

 


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1566035

 

posted on 2007-09-13 21:53  cutepig  阅读(3193)  评论(0编辑  收藏  举报

导航