为了处理访问冲突异常,应为项目配置SEH异常(/ EHa)。
我正在寻找仅处理访问冲突异常的方法。根据此Microsoft出版物here,为了捕获此SEH异常,必须使用将捕获所有异常的常规捕获catch(...)
。
问题是,是否有一个选项可以特定地处理此异常并保留其他未处理的SEH,而不必使用try / catch模式。
更新:由于下面评论中的链接,我发现了用于处理SEH异常的__try/__except
结构以及许多内在函数,这些固有函数可能会提供有关异常性质的更多详细信息。
在某些情况下,我只关心AV异常,因此我希望避免这种情况。但是,我使用的是C ++,并且更喜欢使用标准的try/catch
结构(在配置/ EHa编译器选项时)。
是否可以使用这些内在函数来检查我的情况下的异常类型?
答案 0 :(得分:0)
使用_set_se_translator
仅可以在SEH异常中定义所需的行为,而将所有非seh异常保留在catch
语句中。
我定义了以下处理方式(应为每个线程设置):
void mySEHtranslator(unsigned int exceptionCode, PEXCEPTION_POINTERS exceptionRecord)
{
if (exceptionRecord->ExceptionRecord->ExceptionCode == EXCEPTION_ACCESS_VIOLATION)
{
puts("access violation not count");
}
else
{
throw "1"; // does not suppose to be caught.
}
}
,在相关代码部分中,我想暗示翻译器忽略访问冲突:
void mycode()
{
_set_seh_translator(mySEHtranslator);
try {
.... my code ...
}
catch (...) // does not suppose to catch the "1"
{
}
}
可以找到其他参考here