Visual Studio在断言失败时退出,没有错误消息

时间:2014-12-22 18:42:22

标签: visual-studio visual-c++ visual-studio-2013

我和this post有一个非常类似的问题,但是使用单线程C ++程序:当在Visual Studio 2013中调试期间断言失败时,调试器立即退出而不显示断言失败消息框,这是应该看起来像这样:

enter image description here

(这张照片不是我自己的代码。)

唯一的错误信息是:

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!”断言失败时出现的消息框?

2 个答案:

答案 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