有没有办法关闭断言而不是切换到释放模式。我需要调试一个经常断言的代码,这会减慢我的工作量。 这些断言与我试图解决的问题无关,所以现在它们只会减慢我的进度,因为它们经常在我的一个基类中被调用。 现在我没有时间来改进他们的设计,所以有人可以告诉我是否有办法在处于调试模式并使用它的功能时关闭断言。
答案 0 :(得分:14)
用户_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。
答案 1 :(得分:2)
您可以使用_set_error_mode
或_CrtSetReportMode
(请参阅xMRi的答案)来更改故障报告方法并避免模式对话框。请参阅那里的代码段:
int main()
{
_set_error_mode(_OUT_TO_STDERR);
assert(2+2==5);
}
另请注意,断言失败通常是出于某种原因,并且您希望修复代码,而不仅仅是抑制报告。通过完全从调试版本中删除它们,您只需打破为您构建的好东西。
答案 2 :(得分:1)
#define NDEBUG
之前 #include <assert.h>
禁用assert
宏。
您可以将其添加到项目设置中的预处理器定义中。
答案 3 :(得分:1)
您可以添加编译器标志/DNDEBUG
以关闭断言。我觉得这样比较干净,因为您不必更改代码中的任何内容。
Fromm MSVC documentations:
您可以使用/ DNDEBUG命令行选项关闭断言宏,而无需修改源文件。
答案 4 :(得分:0)
我没有Visual Studio 2013,但是以下内容在Visual Studio 2015中对我有用,因此VS 2013可能也相同或类似。
在main()函数中,调用
_set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT);
在Visual Studio中,转到“调试” /“ Windows” /“例外设置”。在“异常设置”中,转到“ Win32异常/ 0xc0000420断言失败”。取消选中该条目前面的框。
我需要以上两个条件来抑制“调试”模式下的断言弹出窗口。