首页 > 解决方案 > 从可执行文件中删除调试“标志”的 C++ 方法

问题描述

我正在构建比以前更大的 C++ 代码库。我需要良好的日志记录和调试,至少在控制台上,还需要速度。

一般来说,我喜欢做这样的事情

// Some header file

bool DEBUG = true;

然后在其他文件中

if (DEBUG) cout << "Some debugging information" << endl;

这个问题(除其他外)是分支降低了最终可执行文件的速度。为了解决这个问题,我必须在最后进入文件并删除所有这些文件,然后如果不将它们保存到其他文件然后将它们放回原处,我将无法再次使用它们。

解决这个难题的最有效解决方案是什么?Python 装饰器提供了一种我不确定 CPP 中是否存在的好方法。

谢谢!

标签: c++debugging

解决方案


经典的方法是使它DEBUG不是一个变量,而是一个预处理器宏。然后您可以进行两种构建:一种将宏定义为1,另一种将其定义为0(或根本未定义,具体取决于您打算如何使用它)。然后您可以#ifdef完全删除编译器看到的调试代码,或者只是将其放入常规if中,优化器将负责删除带有常量条件的分支。


推荐阅读