寻找一种更简单的方法来编写 Java 中的调试打印语句

2022-09-04 07:17:24

编辑:我很想阅读对史蒂夫·里德的AOP方法的反应。鼓励对他的回答发表评论!

我是一个新手,在某个时候我意识到在程序执行期间了解变量的内容会很有帮助。所以我开始这样做:

编辑:修复了此问题。曾经是:var + “: ” + var,这是完全错误的。愚蠢的错别字。

System.err.println ( "var: " + var );

后来我才知道,这是常见的做法。至少,在调试器不可用或不需要的情况下。

我使用一个基本的文本编辑器,每次我需要调试变量时键入print语句都非常烦人,所以我想,为什么不这样:

void dbug ( Object obj )
{
    String variableName = obj.somehowGetVariableName();
    String variableContents = obj.toString();
    System.out.println ( variableName +": " + variableContents );
}

但显然,获得变量名称说起来容易做起来难。

java-reflection-how-to-get-the-name-of-a-variable

我是否坚持:

System.err.println ( "var: " + var );

还是有一个流行的速记版本?


答案 1

我不会尝试围绕打印出调试信息编写任何花哨的方法。如果您使用的是记录器或其他方式,请坚持使用。LOG.debug(...)System.err.println(...)

您可能希望使用字符串串联来代替字符串连接。String.format("var=%s val=%s", "VarName", val)

请确保重写每个类中的方法,以提供有意义的调试信息。toString

在一天结束时,通常更容易启动调试器并查看正在发生的事情,而不必跟踪大量记录的调试行。

我唯一会使用你的调试方法的时候是,如果我的应用程序在一个映射内维护所有状态,我可以很容易地打印出键值对(例如,Web应用程序中的会话映射)。


答案 2

我认为System.err.format就是你想要的:

System.err.format("var: %s\n", var);

是以下各项的简写:

System.err.println(String.format("var: %s", var));