我和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 Assertion Failed!”断言失败时出现的消息框?
答案 0 :(得分:1)
在我的情况下,问题是配置属性 - > C / C ++ - >代码生成 - >对于Debug和Release版本,运行时库设置为“多线程”。正确的设置是Debug构建的“Multi-threaded Debug”和Release Build的“Multi-threaded”。
答案 1 :(得分:0)
您可以尝试设置自定义的invalid_parameter_handler。
使用vs2017时遇到类似的问题。
当我使用vs2017进行调试时,以下代码将不会触发调试断言失败通知。
char dst[128] = { 0 };
char src[256] = { 0 };
memcpy_s(dst, sizeof(dst), src, sizeof(src));
但是当我设置自定义处理程序时。有用。检出此link