在Eclipse Console中包含与System.out.print语句对应的文件名/行号

san*_*gil 4 java eclipse

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

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

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

aio*_*obe 6

您可以创建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!");
    }
}
Run Code Online (Sandbox Code Playgroud)

Eclipse控制台:

在此输入图像描述

我认为这是一个黑客,我不会用它来做任何事情,只是随便调试.