有没有办法在 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 控制台:
不过,我认为这是一种 hack,除了随意调试外,我不会将其用于任何其他用途。
关于java - 在 Eclipse 控制台中包含与 System.out.print 语句对应的文件名/行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30437019/