首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理特定类型的SEH异常(仅限访问冲突)

处理特定类型的SEH异常(仅限访问冲突)
EN

Stack Overflow用户
提问于 2019-03-21 00:09:23
回答 1查看 594关注 0票数 0

为了处理访问冲突异常,项目需要配置SEH异常(/EHa)。

我正在寻找只处理访问冲突异常。根据微软出版物here的说法,为了捕获这种SEH异常,必须使用通用的catch catch(...)来捕获所有异常。

问题是,是否有一个选项可以在特定情况下处理此异常,而不处理其他SEH,而不一定使用try/catch模式。

更新:多亏了下面评论中的链接,我已经找到了__try/__except结构来处理SEH异常,它有许多内部函数,可能会放入关于异常性质的更多细节。

在可能的情况下,我只关心AV异常,我希望避免它。但是,我使用的是C++,并且更喜欢使用标准的try/catch结构(在配置/EHa编译器选项时)。

在我的例子中,有没有使用这些内部函数来检查异常类型的选项?

EN

回答 1

Stack Overflow用户

发布于 2019-03-25 17:19:46

使用_set_se_translator,我可以仅在SEH异常中定义所需的行为,而将所有非seh异常留给catch语句。

我定义了以下处理(应该为每个线程设置):

代码语言:javascript
复制
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. 
    }
}

在我想暗示忽略访问冲突的翻译器的相关代码部分:

代码语言:javascript
复制
void mycode()
{
    _set_seh_translator(mySEHtranslator);

    try {
        .... my code ...
    } 
    catch (...) // does not suppose to catch the "1" 
    {

    }
}

有关更多参考资料,请访问here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55265355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档