2011-07-11 94 views
4

我在Visual C++ 2005中声明了一个奇怪的问题。我尝试将断言引入到我的程序中,无论断言我尝试使用(assert()或BOOST_ASSERT_MSG )它给出了完全相同的错误信息,它告诉我除了发生调试错误之外别无他法。Assert将不会显示错误消息

调试错误!

计划:...

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

(按重试来调试应用程序)

下面是我使用

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"); 

无论我使用的是新的还是旧的项目,都会出现不伦不名的错误。

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

回答

6

如果你使用微软的_ASSERTE宏(注意Ë表达),那么也会出现在断言对话框中的消息。

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

  • _ASSERTE提供更好的诊断,但结果在稍大一点的二进制文件(因为表达的文字表述必须包含二进制)
  • _ASSERT给在断言对话的信息较少,但在较小的二进制文件的结果。

由于这两种口味,这不仅使调试版本的代码,我倾向于始终使用_ASSERTE因为二进制文件的大小几乎没有影响,不会多大关系在调试版本。

+0

啊,是的,这似乎工作。谢谢,猜猜我会使用_ASSERTE。仍然会想知道为什么其他断言不起作用。 – Mathmagician

+0

@Mathmagician其他版本的工作,他们只是描述性较低,我已经更新了我的答案,以反映你为什么要这样做。 – Motti