zoukankan      html  css  js  c++  java
  • 关于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

  • 相关阅读:
    Twitter网站架构学习笔记
    优化和架构之服务切分
    现代浏览器的工作原理
    可伸缩性原则
    图解:2013年百度搜索引擎工作原理
    构建的可伸缩性和达到的性能:一个虚拟座谈会
    提升可伸缩性的8项最佳实践
    Oracle odbc配置
    Oracle Error
    java与java web数组括号的不同
  • 原文地址:https://www.cnblogs.com/cutepig/p/892175.html
Copyright © 2011-2022 走看看