如何在C/C++中将assert放入发布版本中

17 c c++ assert release

我只需要运行ship build,我需要在发布版本中断言某些条件以查看问题是否已修复.我该怎么做?

Mic*_*urr 18

取消定义NDEBUG宏 - 您可以围绕要保留在构建中的断言在本地执行此操作:

#undef NDEBUG
#include <assert.h>   // reinclude the header to update the definition of assert()
Run Code Online (Sandbox Code Playgroud)

或者做任何你需要做的事情,这样你的构建过程就不会首先定义NDEBUG宏.


Bai*_*ang 18

为什么不定义自己的断言:

#define assert(x) MessageBox(...);
Run Code Online (Sandbox Code Playgroud)

  • 投票,因为这是唯一的圣徒建议.虽然建议输入一个行号,并解释出错的原因.虽然接下来还要设计你自己的崩溃系统,所以当一个断言命中时,你会自动发送给你的内存转储. (4认同)
  • 我喜欢这个,但是想提出一个六年后期的建议 - 为你的断言使用一个不同的名称,你希望在发布和调试版本中存在如`ndbgassert`或类似的东西.这样你就可以在两者之间做出选择. (3认同)
  • 如何断言 MessageBox?它不应该先检查条件吗? (2认同)

Dan*_*nas 5

只需直接调用assert在发布模式下处于活动状态的宏定义部分即可.

Miro Samek(PDF)这篇伟大的文章中,您可以找到非常有用的C++断言定义.然后你可以稍微调整它们以满足你的需求.例如,您可以创建另一个宏,release_assert它与assert相同,但无论它是处于释放模式还是调试模式.