如何在 Visual Studio 2013 中的调试模式下关闭 ASSERT
How to turn off ASSERTs in debug mode in Visual Studio 2013
有没有办法关闭断言而不是切换到发布模式。我需要调试一个经常做出断言的代码,这会减慢我的工作速度。这些断言与我试图解决的问题无关,所以现在它们只会减慢我的进度,因为它们在我的一个基类中经常被调用。现在我没有时间改进他们的设计,所以有人可以告诉我是否有办法在处于调试模式并使用其功能时关闭断言。
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 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 命令行选项关闭断言宏而不修改源文件。
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 小字符串优化(调试与发布模式)
- 在调试模式下引发C++ "deque iterator not dereferencable"异常
- _mm256_load_ps调试模式下导致谷歌/基准测试的分段错误
- Visual Studio 发布模式阻止在调试模式下执行的代码.使用 WinHTTP 和多线程
- 自定义内存管理器在发布模式下工作正常,但在调试模式下则不然
- 使用Qt Creator在调试模式下编译一段代码
- 在调试模式下,所有程序都运行良好,但在发布模式下,我在cudaMalloc操作中出错
- 在类声明中初始化 const 成员变量时在调试模式下出现异常
- 在调试模式下编译时qrc_resource.cpp错误
- 如何在调试模式下通过终端运行可执行的 c++?
- 在Visual Studio 2017上无法使用调试模式x64进行OpenCV3.2编译
- 在调试模式下使用英特尔 TBB
- 我的代码在发布模式下不起作用,而在Qt的调试模式下工作
- SCANF 在 Eclipse 中不接受调试模式下的输入?
- 为什么我的 UWP 游戏在发布时比在调试模式下慢
- 在发布模式下崩溃,但如果可调试为 true - 不是..什么是可能的问题
- Visual Studio混合模式调试是否可以附加到Jupyter笔记本以同时调试C++和Python
- Windows 用户模式调试器传输 Visual Studio 2012
- VS2010 中使用 .NET 3.5 的混合模式调试