如何在 Visual Studio 2013 中以调试模式关闭 ASSERT

How to turn off ASSERTs in debug mode in Visual Studio 2013

有什么方法可以关闭断言而不是切换到释放模式。我需要调试经常进行断言的代码,这会减慢我的工作速度。 这些断言与我要解决的问题无关,所以现在它们只会减慢我的进度,因为它们在我的一个基地 类 中经常被调用。 现在我没有时间改进他们的设计,所以有人可以告诉我是否有办法在调试模式下关闭断言并使用它的功能。

#define NDEBUG#include <assert.h> 之前禁用 assert 宏。

您可以将其添加到项目设置中的预处理器定义中。

您可以使用 _set_error_mode or _CrtSetReportMode(参见 xMRi 的回答)来改变故障报告方法并避免模态对话框。请参阅此处的代码片段:

int main()
{
   _set_error_mode(_OUT_TO_STDERR);
   assert(2+2==5);
}

另请注意,断言失败通常是有原因的,您想要修复代码,而不仅仅是抑制报告。通过将它们从调试版本中完全删除,您只是破坏了为您构建的好东西。

用户 _CrtSetReportMode

int iPrev = _CrtSetReportMode(_CRT_ASSERT,0);
// Start Operation with no ASSERTs
...
// Restore previous mode with ASSERTs
_CrtSetReportMode(_CRT_ASSERT,iPrev);

您可以只使用 _CRTDBG_MODE_DEBUG 而不是使用 0。

我没有 Visual Studio 2013,但以下在 Visual Studio 2015 对我有用,所以可能相同或类似的东西也适用于 VS 2013。

在您的 main() 函数中,调用

_set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT);

在Visual Studio中,转到调试/Windows/异常设置。在异常设置中,转到 Win32 异常/0xc0000420 断言失败。取消选中该条目前面的框。

我需要以上两项来抑制调试模式下的断言弹出窗口。

您可以添加一个编译器标志 /DNDEBUG 来关闭断言。我觉得这样更干净,因为您不必更改代码中的任何内容。

弗洛姆 MSVC documentations:

You can turn off the assert macro without modifying your source files by using a /DNDEBUG command-line option.