为了处理访问冲突异常,项目需要配置SEH异常(/EHa)。
我正在寻找只处理访问冲突异常。根据微软出版物here的说法,为了捕获这种SEH异常,必须使用通用的catch catch(...)来捕获所有异常。
问题是,是否有一个选项可以在特定情况下处理此异常,而不处理其他SEH,而不一定使用try/catch模式。
更新:多亏了下面评论中的链接,我已经找到了__try/__except结构来处理SEH异常,它有许多内部函数,可能会放入关于异常性质的更多细节。
在可能的情况下,我只关心AV异常,我希望避免它。但是,我使用的是C++,并且更喜欢使用标准的try/catch结构(在配置/EHa编译器选项时)。
在我的例子中,有没有使用这些内部函数来检查异常类型的选项?
发布于 2019-03-25 17:19:46
使用_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
https://stackoverflow.com/questions/55265355
复制相似问题