SetUnhandledExceptionFilter不起作用

时间:2017-07-18 01:49:58

标签: windows

#include   <windows.h>   

long   __stdcall   callback(_EXCEPTION_POINTERS*   excp)
{
    MessageBox(0, "Error", "error", MB_OK);

    return   EXCEPTION_EXECUTE_HANDLER;
}

int   main(int   argc, char*   argv[])
{
    SetUnhandledExceptionFilter(callback);
    int *  p;
    free(p);                //to crash
    return   0;
}

当我使用SetUnhandledExceptionFilter来捕获错误时,它不起作用。我的IDE是vs 2013,x64系统和程序。我尝试了调试和发布,都失败了。

如果它被放弃了,我怎么能在程序中获得崩溃转储?

1 个答案:

答案 0 :(得分:0)

为了触发回调,必须满足以下所有条件:

  • 它必须是调试版本,因为无效的free()不会在版本构建中导致异常。 (它可能会或可能不会间接在更大的程序中导致异常,但在发布的代码中却没有。)

  • 您必须在没有调试器的情况下运行可执行文件,因为如果存在调试器,则会忽略未处理的异常过滤器。

  • 您必须选择&#34;忽略&#34;当出现“调试错误”窗口时,选项警告您正在使用p而未初始化。

我不确定你实际上是想在这里实现什么,但这可能不是正确的方法。