用Java编译调试代码

时间:2013-11-22 03:41:58

标签: java compilation

我希望能够在编写生产版本时编译出我的调试代码(详细日志记录等),但编译进行调试。

据我所知,如果我对常量进行分支,编译器将删除分支,这就是我想要的。所以我有一节课:

class Debug {
  public static final boolean ON=true;
}

我的调试代码在这样的分支内:

if (Debug.ON) {
    // Verbose / expensive logging goes here
}

我的问题是,如何在编译时将Debug.ON设置为true或false,而不是实际编辑源文件?

编辑:请注意,我并不关心控制是否出现日志输出 - 我正在使用java.util.Logging,它可以解决这个问题。我更关心编译任何准备日志消息的昂贵代码,这些代码永远不会得到输出,或者进行生产模式中不需要的测量。

我想我可以有一个蚂蚁目标,从模板或其他东西制作源文件,但它似乎是一个黑客。在C ++中,我能够定义一个预处理器符号,我可以用-D传入它 - 是否有任何Java等价物?还是其他一些更好的方式?

2 个答案:

答案 0 :(得分:1)

你可以做的是有两个Jars或类文件。

一个包含Debug类,其中ON = true,另一个ON = false。

然后根据您想要的调试状态进行编译时,在类/ jar文件或DEBUG关闭类/ jar文件中包含DEBUG。

答案 1 :(得分:0)

迈克尔·威尔斯的回答可能是最直接的方式来完全按照你的要求去做。但是,所有流行的日志记录框架都允许您查询记录器是否配置为在特定日志记录级别实际输出任何内容。

对于java.util.logging,您可以使用isLoggable。虽然这不是编译时检查,但与记录昂贵的计算资料相比,它应该相当便宜。