【问题标题】:Assert won't display the error message断言不会显示错误信息
【发布时间】:2011-10-02 15:50:21
【问题描述】:

我在 Visual C++ 2005 中遇到了一个奇怪的断言问题。我试图在我的程序中引入断言,无论我尝试使用什么断言(assert() 或 BOOST_ASSERT_MSG),它都会给出完全相同的错误消息除了发生调试错误之外,它什么也没告诉我。

调试错误!

程序:...

此应用程序已请求运行时以不寻常的方式终止它。 请联系支持团队了解更多信息。

(按重试调试应用程序)

这是我正在使用的 boost 断言

BOOST_ASSERT_MSG(deathRow.size() >= 3, "There are less than 3 blocks being deleted!");

是的,它给出了与以下完全相同的错误消息:

assert(deathRow.size() >= 3 && "There are less than 3 blocks being deleted");

无论我使用什么项目,无论是新项目还是旧项目,都会发生无法描述的错误。

我不知道为什么。我知道我之前在另一个程序中使用过断言并且没有这个问题。帮助将不胜感激。

【问题讨论】:

    标签: c++ message assert


    【解决方案1】:

    如果您使用 Microsoft 的 _ASSERTE 宏(注意 ExpressionE),那么该消息也会出现在断言对话框中。

    ASSERT 两个版本都存在的原因是它们都有优点和缺点,你可以选择你想要的。

    • _ASSERTE 提供更好的诊断,但生成的二进制文件稍大(因为表达式的文本表示必须包含在二进制文件中)
    • _ASSERT 在断言对话框中提供的信息较少,但会生成较小的二进制文件。

    由于这两种风格都只在调试版本中生成代码,我倾向于总是使用_ASSERTE,因为二进制文件的大小几乎不会受到影响,并且在调试版本中并不重要。

    【讨论】:

    • 啊,是的,这似乎有效。谢谢,我想我会使用 _ASSERTE 。仍然有点想知道为什么其他断言不起作用。
    • @Mathmagician 其他版本正在运行,它们的描述性较差,我已经更新了我的答案以反映您可能想要的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多