是否有“最佳实践”或类似的代码在 Debug模式下编码? 例如,
#include <iostream>
int main()
{
#ifdef MY_DEBUG_DEF
std::cout << "This is only printed if MY_DEBUG_DEF is defined\n";
#endif
return 0;
}
或者这被认为是不好的做法,因为代码变得有点困惑? 我注意到一些库(例如 libcurl,这是一个大型且著名的库)具有此功能;如果你用 libcurl 定义 VERBOSE,你基本上会得到一个 Debug模式
谢谢。
最佳答案
更常用的方法是遵循 assert(3) 中的约定: 用 #ifndef NDEBUG
包裹.... #endif
代码只对调试有用,没有任何明显的副作用。
你甚至可以添加一些调试打印宏
extern bool wantdebug;
#ifndef NDEBUG
#define OUTDEBUG(Out) do { if (wantdebug) \
std::cerr << __FILE__ << ":" << __LINE__ \
<< " " << Out << std::endl; \
} while(0)
#else
#define OUTDEBUG(Out) do {}while(0)
#endif
并使用类似 OUTDEBUG("x=" << x)
的东西在代码中的适当位置。那么wantdebug
标志将通过调试器或一些程序参数设置。您可能想要发出换行符并刷新 cerr
(或 cout
,或您自己的调试输出流)-使用 std::endl
...- 立即显示调试输出(这样您的程序将来崩溃时仍会提供合理的调试输出)。
关于c++ - 在 C++ 中编写 Debug模式的标准方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28737776/