0

我打算添加一个 DEBUG 标志,并if statement在每次Log.d调用之前添加一个

 public static final boolean DEBUG = FALSE;
 if (DEBUG)
 {
    Log.d(TAG,"Debug"); //dead code
 }

死代码会在编译时被删除,还是if statement每次都会被调用?

4

3 回答 3

1

不,它增加了代码的冗长,只需为此目的使用日志库,例如Log4J ...

logger.debug("Here is some DEBUG");

在 Android 中,您可以使用android-logging-log4j ...

于 2013-02-03T10:01:45.123 回答
1

它没有被完全删除,但由于 CPU 的分支预测,接下来不会对性能产生影响。

理想情况下,您应该使用记录器的日志记录级别来确定是否应该调用记录器。

注意:无论您是否检查(并且库应该检查),像这样的简单方法调用几乎没有开销(并且库应该检查)您获得性能优势的地方是如果您在日志消息中执行某些操作,例如

LOGGER.debug("The map is " + map);

在这种情况下,只有启用调试时才会显示调试消息,但是每次都会构建字符串消息,这意味着效率更高。

if(LOGGER.isDebugEnabled())
    LOGGER.debug("The map is " + map);
于 2013-02-03T10:05:07.950 回答
1

您的调试代码将始终被执行(总是 if)。顺便说一句,Android 已经有了这种类型的标志:BuildConfig.DEBUG

于 2013-02-03T10:08:06.243 回答