异常处理.VC++

ZC:个人这样 理解 C++的异常处理:

ZC:  (1)、C++标准异常处理,try{}catch{}  抛异常:throw() [ 据说是包装的Windows函数RaiseException() ]

ZC:  (2)、VC++异常处理 __try{}__except{}  抛异常:RaiseException()  两个宏:GetExceptionCode() & GetExceptionInformation()

ZC:  (3)、CRT 包装后的异常处理

 

1、资料:

  1.1、C++及Windows异常处理(try,catch; __try,__finally; __try, __except)——一道笔试题引起的探究 - CSDN博客.html(https://blog.csdn.net/lishi969635/article/details/50279809

  1.2、

    try except and try catch - CSDN博客.html(https://blog.csdn.net/chief1985/article/details/2443235

    WINCE驱动常见的C++ 之try-except - 温子祺 - 博客园.html(http://www.cnblogs.com/wenziqi/archive/2010/08/26/1809074.html

 

  ZC:记得之前看到文章 说,VS 会修改 异常处理的处理,忘了是什么知识点了...

  ZC:  貌似是搜索“VC 崩溃 不生成 dump VS”,大概是 “使用VS2005(VC8)编译的程序,许多错误都不能在SetUnhandledExceptionFilter捕获到。这是CRT相对于前面版本的一个比较大的改变,但是很遗憾,Microsoft却没有在相应的文档明确指出。”

2、

3、测试代码:

long WINAPI FilterFunc01(char* _pcFuncName, DWORD _dwExceptionCode)
{
    //return (_dwExceptionCode == STATUS_STACK_OVERFLOW) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH;

    sprintf_s(g_bufLogTemp, sizeof(g_bufLogTemp),
        "[%s] ==> ==> ==> [Exception] FilterFunc(...) - _dwExceptionCode : %d(0x%08X)", _pcFuncName, _dwExceptionCode, _dwExceptionCode);
    RemoteLog_IndentInside_M01(g_pCommunicator->Frole, g_bufLogTemp);

    return EXCEPTION_EXECUTE_HANDLER;
    // #define STATUS_SEGMENT_NOTIFICATION      ((DWORD   )0x40000005L) 
    //STATUS_STACK_OVERFLOW
}

void SomeTestFunc()
{
    __try
    {
... ... } __except ( FilterFunc01( bufCCC, GetExceptionCode() ) )
//__except ( FilterFunc01( bufCCC, GetExceptionCode() ) ) { //STATUS_STACK_OVERFLOW //STATUS_ACCESS_VIOLATION ((DWORD )0xC0000005L) //STATUS_ILLEGAL_INSTRUCTION ((DWORD )0xC000001DL) //AnswerJustResult(pcBlock, iRst); }// __except }

 

4、

5、

 

posted @ 2018-06-08 16:55  CppSkill  阅读(596)  评论(0编辑  收藏  举报