首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SEH错误报告

SEH错误报告
EN

Stack Overflow用户
提问于 2011-04-06 16:01:32
回答 1查看 1.3K关注 0票数 0

我有一个Visual 2008 C++程序,该程序被包装在一个__try/__except块中,以捕获任何SEH异常。异常筛选器创建错误日志,并向用户提供关于如何提交缺陷报告的详细说明。

过滤器中的代码是否需要包装在另一个__try/__except块中?如果没有,如果例外会发生什么?若然,应如何处理?

代码语言:javascript
复制
static int MyFilter( struct _EXCEPTION_POINTERS* ep )
{
    /*
    Code to log the exception information, and instruct the user 
    on how to submit a defect report. Should this be in another
    __try/__except block?
    */
    return EXCEPTION_EXECUTE_HANDLER;
}

int WINAPI _tWinMain( HINSTANCE hInstance, 
                      HINSTANCE /*hPrevInstance*/, 
                      LPTSTR lpstrCmdLine, 
                      int nCmdShow )
{
    int result = 0;

    __try
    {
        result = Execute( hInstance, lpstrCmdLine, nCmdShow );
    }
    __except( MyFilter( GetExceptionInformation() ) )
    {
        // empty
    }

    return 0;
}

谢谢,PaulH

编辑:如果MyFilter引发异常,那么我将进入无限异常循环。因此,它看起来确实需要__try/__except处理。我要做的是:

代码语言:javascript
复制
static int MyFilter( struct _EXCEPTION_POINTERS* ep )
{
    __try 
    {
        /*
        Code to log the exception information, and instruct the user 
        on how to submit a defect report. 
        */

       // cause an exception
       int x = 0, y = 1 / x;
    }
    __except( EXCEPTION_EXECUTE_HANDLER ) { /*empty*/ }
    return EXCEPTION_EXECUTE_HANDLER;
}

在这种情况下,程序应该有一个异常终止和异常应该被传递给操作系统来处理。对吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-06 16:57:37

如果在筛选器中引发异常,将再次出现在筛选器方法中。您的异常将由同一个__except块处理。

但是在过滤器方法中使用另一个__try __except块没有问题。

不幸的是,我不能给你任何这方面的参考。我只是自己试了一下,你也可以。把除法强制为零。

通常我不使用SEH,但是在我使用SEH的几次中,在过滤器方法中引发异常没有问题。但是当我寻找这个时,我没有在msdn中找到任何东西。

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

https://stackoverflow.com/questions/5569471

复制
相关文章

相似问题

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