如果在Windows计算机上断言失败,如何防止出现调试弹出窗口?我正在编写的应用程序是基于控制台的,我正在使用assert()来测试某些在测试模式下执行的东西。我正在使用MinGW + GCC 4。
编辑:这是测试程序。
#include <stdlib.h>
#include <assert.h>
int main(void) {
_set_error_mode(_OUT_TO_STDERR);
assert(0 == 1);
return EXIT_SUCCESS;
}
标志:gcc -mwindows -pedantic -Wall -Wextra -c -g -Werror -MMD -MP -MF ...
在没有-mwindows
的情况下尝试过。无论如何,我仍然可以获得调试弹出窗口。这是在Vista x86机器上。
答案 0 :(得分:3)
有很多方法可以做到这一点。最粗略的是重新定义assert
宏(请参阅mingw assert.h
标题)。你也可以打电话(这是我建议的):
_set_error_mode (_OUT_TO_STDERR);
编辑:真的,它对我有用:
#include <stdlib.h>
#include <assert.h>
int main (void)
{
_set_error_mode (_OUT_TO_STDERR);
assert (0 == 1);
return 0;
}
使用gcc -mwindows
进行编译,它不会在运行时显示对话框。删除_set_error_mode
行,并显示对话框。如果它对您不起作用,请举一个完整的例子。
答案 1 :(得分:2)
这是我使用的,这似乎有效:
SetErrorMode (SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);