完全特色的C ++断言对话框?

时间:2009-06-11 21:19:13

标签: c++ visual-studio assertions

我正在为VisualStudio寻找一个功能齐全的C ++断言宏。具有能够忽略一次或总是断言的功能,能够准确地破坏宏被调用的位置(而不是宏代码内部),并获得堆栈跟踪。

在我不得不蹲下来写一个之前,我想我会问是否有人知道那里有可用的那些。

有什么建议吗?

谢谢!

5 个答案:

答案 0 :(得分:8)

有关assert宏的详细讨论,请参阅Charles Nicholson's blog。他的解决方案在错误的代码行中打破了调试器(而不是在失败的断言处理程序中),并且他还解决了在禁用断言时不会获得有关未使用变量的警告而不会产生任何运行时成本的问题。

答案 1 :(得分:1)

这是我为DDJ写的一篇文章的链接,其中描述了一个库,它可以完成您所需的大部分工作。虽然我不只是使用宏,但我也在DLL中实现函数。

http://www.ddj.com/architect/184406106

几年前的文章,虽然我做了很多补充,但我仍然在我的日常代码中非常自由地使用它。

答案 2 :(得分:1)

_ASSERTE会在您想要的地方打破 - 但不符合您的其他标准。

_ASSERTE很好,因为它显示实际的断言文本以及文件名和行号。这意味着你可以这样做:

_ASSERTE(bufLen > 0 && "bufLen needs to be greater than 0");

答案 3 :(得分:0)

OpenOffice has some assertion code,可以选择登录到消息框。可能不完全是你想要的,但也许是有启发性的?

答案 4 :(得分:0)

我发布了PPK_ASSERT。虽然它没有打开对话框,但在Windows上,默认处理程序会打开一个控制台,您可以在其中阅读断言消息并决定采取哪种操作。

#include <pempek_assert.h>

int main()
{
  float min = 0.0f;
  float max = 1.0f;
  float v = 2.0f;
  PPK_ASSERT(v > min && v < max, "invalid value: %f, must be between %f and %f", v, min, max);

  return 0;
}