Include filename/line number corresponding to System.out.print statements in Eclipse Console

前端 未结 3 2057
星月不相逢
星月不相逢 2020-12-16 06:05

Is there a way to show line numbers in the Eclipse console?

My intent here is to show in the Eclipse console the file/line number that produced the output, not a se

3条回答
  •  盖世英雄少女心
    2020-12-16 06:31

    You can create a custom PrintStream that inspects the current stack trace and includes file / line numbers in the output. You can then use System.setOut/System.setErr to cause all stdout/stderr output to include this information.

    By formatting it properly Eclipse will pick it up as stack trace elements and generate links.

    Here's a complete demo:

    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 Console:

    enter image description here

    I consider this to be a hack though, and I wouldn't use it for anything but casual debugging.

提交回复
热议问题