我正在用 SEH 做一些实验。在我的代码中,我在 __try 子句中编写了导致错误的块,并在 __except() 中编写了一个处理程序。
__try{
Test *pTest = 0;
int k = pTest->GetValue();
cout << "continue after exception" << endl;
}
__except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION,EXCEPTION_EXECUTE_HANDLER)
{
cout << "caught!!" << endl;
}
cout << "Exception handled" << endl;
__except() 的第二个参数是以下之一 -
EXCEPTION_CONTINUE_SEARCH 无法识别异常。继续在堆栈中搜索处理程序,首先是包含 try-except 语句,然后是具有下一个最高优先级的处理程序。
EXCEPTION_CONTINUE_EXECUTION 异常被识别但被解除。在发生异常的地方继续执行。
EXCEPTION_EXECUTE_HANDLER 识别出异常。通过执行 __except 复合语句将控制权转移到异常处理程序,然后在发生异常的点继续执行。
当我使用 EXCEPTION_CONTINUE_EXECUTION/EXCEPTION_EXECUTE_HANDLER 时,它不会在异常发生点继续执行(可能是我误解了异常发生点的含义)。当我在调试模式下运行它时,输出是
caught
Exception handled
当我在发布模式下运行它时,输出是
continue after exception
Exception handled
我不明白为什么它的行为不同。任何人请帮忙。