java - 在 Eclipse 控制台中包含与 System.out.print 语句对应的文件名/行号

标签 java eclipse

有没有办法在 Eclipse 控制台中显示行号?

我的目的是在 Eclipse 控制台中显示生成输出的文件/行号,而不是消息的连续行号(尽管这也可能是一个有趣的问题)。

我正在寻找类似于 Chrome 的 javascript 控制台的东西,其中每一行都有一个链接,可以将您带到打印它的函数。

最佳答案

您可以创建自定义 PrintStream 来检查当前堆栈跟踪并在输出中包含文件/行号。然后,您可以使用 System.setOut/System.setErr 使所有 stdout/stderr 输出包含此信息。

通过正确格式化它,Eclipse 会将其作为堆栈跟踪元素获取并生成链接。

这是一个完整的演示:

public class Main {
    public static void main(String args[]) {
        System.setOut(new java.io.PrintStream(System.out) {

            private StackTraceElement getCallSite() {
                for (StackTraceElement e : Thread.currentThread()
                        .getStackTrace())
                    if (!e.getMethodName().equals("getStackTrace")
                            && !e.getClassName().equals(getClass().getName()))
                        return e;
                return null;
            }

            @Override
            public void println(String s) {
                println((Object) s);
            }

            @Override
            public void println(Object o) {
                StackTraceElement e = getCallSite();
                String callSite = e == null ? "??" :
                    String.format("%s.%s(%s:%d)",
                                  e.getClassName(),
                                  e.getMethodName(),
                                  e.getFileName(),
                                  e.getLineNumber());
                super.println(o + "\t\tat " + callSite);
            }
        });

        System.out.println("Hello world");
        printStuff();
    }

    public static void printStuff() {
        System.out.println("More output!");
    }
}

Eclipse 控制台:

enter image description here

不过,我认为这是一种 hack,除了随意调试外,我不会将其用于任何其他用途。

关于java - 在 Eclipse 控制台中包含与 System.out.print 语句对应的文件名/行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30437019/

相关文章:

java - DbUnit 的 XML 文件中的变量值

java - 在服务器端启用 "Ignoring unsupported cipher suite"时出现 "-Djavax.net.debug=ssl:handshake"消息

java - 如何使用 Ivy 设置默认的 java 项目、编译和测试配置?

java - 服务器遇到内部错误,异常是 org.apache.jasper.JasperException : Unable to compile class for JSP

java - 如何在 Ant 中将 java 项目转换为插件项目?

java - 如何比较日期从java到mysql时间戳字段

java - Hibernate - IllegalArgumentException 在调用模型的 getter 时发生

java - 如何异步设置值并在稍后阶段获取它

eclipse - J2EE eclipse 文件上传项目需要在服务器注册新文件之前刷新包资源管理器?

eclipse - 如何在 eclipse ant 编辑器中启用撤消?