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

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

本文关键字:模式 调试 ASSERT Visual Studio 2013      更新时间:2023-10-16

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

User _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。

您可以使用

_set_error_mode_CrtSetReportMode(请参阅 xMRi 的答案)来更改故障报告方法并避免模式对话框。请参阅那里的代码片段:

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

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

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

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

我没有Visual Studio 2013,

但以下内容在Visual Studio 2015中对我有用,所以也许相同或类似的东西也适用于VS 2013。

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

_set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT);

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

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

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

Fromm the MSVC 文档:

可以使用/DNDEBUG 命令行选项关闭断言宏而不修改源文件。