我在Visual C ++ 2005中遇到了一个奇怪的断言问题。我试图将断言引入我的程序中,无论我尝试使用什么断言(assert()或BOOST_ASSERT_MSG),它都会给出完全相同的错误消息这告诉我除了发生调试错误之外什么都没有。
调试错误!
计划:......
此应用程序已请求Runtime以不寻常的方式终止它。 请联系支持团队获取更多信息。
(按“重试”以调试应用程序)
这是我正在使用的提升断言
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");
无论我使用的是什么项目,无论是新的还是旧的,都会发生不伦不类的错误。
我不知道为什么。我知道我之前在另一个程序中使用过断言并且没有这个问题。帮助将不胜感激。
答案 0 :(得分:6)
如果您使用Microsoft的_ASSERTE
宏(请注意 Expression 的 E ),则该消息也将出现在断言对话框中。
两个版本的ASSERT
存在的原因是两者都有优点和缺点,你可以选择你想要的。
_ASSERTE
提供更好的诊断功能,但会产生稍微大一点的二进制文件(因为表达式的文本表示必须包含在二进制文件中)_ASSERT
在断言对话框中提供的信息较少,但会产生较小的二进制文件。由于两种版本只在调试版本中生成代码,因此我总是使用_ASSERTE
,因为二进制文件的大小几乎不受影响,并且在调试版本中无关紧要。