特殊调试线(java)

Dav*_*vid 1 java debugging logging coding-style

最近我发现自己编写了许多方法,我只能想到调用脚手架.这是一个例子:

public static void printArray (String[] array, boolean bug) 
{ 
    for (int i = 0; i<array.lenght; i++) 
    { 
        if (bug) System.out.print (i) ; //this line is what i'm calling the debugging scaffolding i guess. 
        System.out.println(array[i]) ; 
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种方法中,如果我将bug设置为true,无论从某种用户输入调用它,我都会得到特殊的调试文本,让我知道打印的字符串是什么索引,以防万一我需要知道为了我的调试(假装事态存在,它的帮助).

我的所有问题或多或少都归结为这个问题:这是一个好主意吗?但有点客观性:

  • 这是测试我的方法并调试它们的有效方法吗?我的意思是在效率方面有效,而不是弄乱我的代码.

  • if (bug) stuff ;在我的方法开始工作之后,将代码留在原地是否可以接受?(如果需要"可接受性"的定义来使这个问题成为目标,那么使用"不是一个关于编程争议的问题,例如if(boolean) 在它后面只用一行省略括号,尽管如果你有更好的东西继续使用你的定义我不介意)

  • 是否有更有效的方法来完成调试比我正在做的更容易?

  • 你知道我想要的任何东西,但我已经忘记了(尽可能多的信息被理解).

Flo*_*ann 5

我不认为你的方式真的是一种很好的记录方式.

为什么?

它在运行时不可配置.它是为每个日志语句定制的并且是特定的.

还有什么?

您应该查看一些常见的日志记录实用程序 我所知道的最常见的是log4j.

所以你走了:http://logging.apache.org/log4j/


Dan*_*que 5

查看Simple Logging Facade for Java(slf4j).它包含了Log4j的功能.

slf4j允许您以固定的重要性记录每个语句,范围从低重要性DEBUG消息到中等重要性INFO消息,再到ERROR的关键内容.中间重要性水平也是如此.

您可以在运行时配置slf4j的重要性阈值.因此,当您只想要优先级最高的消息时,可以将阈值设置为ERROR,但是在测试时,将其设置为DEBUG.这意味着只需调整一些设置就可以看到不同程度的调试详细程度.您无需重新编译即可更改记录的语句.这是一场大胜利.

你现在正在做的基本上是slf4j log.debug("message").

还要考虑Java 断言.断言可帮助您在运行时保证程序内部状态的属性.