#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系统和程序。我尝试了调试和发布,都失败了。
如果它被放弃了,我怎么能在程序中获得崩溃转储?
答案 0 :(得分:0)
为了触发回调,必须满足以下所有条件:
它必须是调试版本,因为无效的free()不会在版本构建中导致异常。 (它可能会或可能不会间接在更大的程序中导致异常,但在发布的代码中却没有。)
您必须在没有调试器的情况下运行可执行文件,因为如果存在调试器,则会忽略未处理的异常过滤器。
您必须选择&#34;忽略&#34;当出现“调试错误”窗口时,选项警告您正在使用p
而未初始化。
我不确定你实际上是想在这里实现什么,但这可能不是正确的方法。