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、