Windows:防止assert()失败打开调试弹出窗口

时间:2010-01-27 16:33:59

标签: c gcc mingw assert

如果在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机器上。

2 个答案:

答案 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);