我有一个与this post非常相似的问题,但是使用单线程C ++程序:当在Visual Studio 2013中调试期间断言失败时,调试器立即退出而不显示断言失败消息框,该消息框看起来像这样:
(这张照片不是我自己的代码。)
唯一的错误消息是:
The program '[5156] myprogram.exe' has exited with code 3 (0x3).
这使得几乎不可能弄清楚断言失败发生的位置,因为代码库非常大。
对链接问题的回复建议添加一个调用:
_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG);
在程序开始时,断言错误至少打印到输出窗口。但是,这不仅是hacky,而且对于我在Visual Studio中调试过的任何其他程序也不是必需的。
这不是我自己的Visual Studio项目,我想知道某个地方是否存在流氓设置。我在Debug - > Exceptions中为断言错误启用了“在抛出异常时中断”,因此这不是问题。
如何强制“Debug Assertion Failed!”断言失败时出现的消息框?
在我的例子中,问题是Debug Properties和Release版本的配置属性 - > C / C ++ - >代码生成 - >运行时库被设置为“多线程”。正确的设置是Debug构建的“Multi-threaded Debug”和Release Build的“Multi-threaded”。
您可以尝试设置自定义的invalid_parameter_handler。
使用vs2017时遇到类似的问题。
当我使用我的vs2017进行调试时,以下代码不会触发调试断言失败通知。
char dst[128] = { 0 };
char src[256] = { 0 };
memcpy_s(dst, sizeof(dst), src, sizeof(src));
但是当我设置自定义处理程序时。有用。结帐这个link