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

问题描述 投票:3回答:2

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

visual-studio visual-c++ visual-studio-2013
2个回答
1
投票

在我的例子中,问题是Debug Properties和Release版本的配置属性 - > C / C ++ - >代码生成 - >运行时库被设置为“多线程”。正确的设置是Debug构建的“Multi-threaded Debug”和Release Build的“Multi-threaded”。


0
投票

您可以尝试设置自定义的invalid_parameter_handler。

使用vs2017时遇到类似的问题。

当我使用我的vs2017进行调试时,以下代码不会触发调试断言失败通知。

char dst[128] = { 0 };
char src[256] = { 0 };
memcpy_s(dst, sizeof(dst), src, sizeof(src));

但是当我设置自定义处理程序时。有用。结帐这个link

© www.soinside.com 2019 - 2024. All rights reserved.