注意:要明确,问题不在于“如何在Eclipse中显示行号?” That is answered here @ StackOverflow
目标:我想知道Eclipse是否有一个充当getLineNumber()
的宏,就像Visual Studio能够使用预处理器宏__LINE__
一样轻松/普遍地获取#的行#这个对getLineNumber()
的特殊呼吁依然存在。在不使用调试器/断点的情况下,知道是否有一行代码被命中是很有用的。
我想使用println("I just hit file@line: "+__FILE__ +'@'+ __LINE__ );
我正在寻找一个可以复制并粘贴到任何文件/任何行的通用宏,以便在编译时/之前知道这些值。 Java / Eclipse是否提供这样的功能?可能在Eclipse插件中?
我无法在任何地方找到任何相关信息,我很茫然。感谢。
答案 0 :(得分:2)
您可以尝试:
System.out.println("I just hit file@line: "+Thread.currentThread().getStackTrace()[1].getFileName() +'@'+ Thread.currentThread().getStackTrace()[1].getLineNumber());
Thread.currentThread().getStackTrace()
将返回StackTraceElement
的数组,我们将获取第二个元素(第一个元素将位于Thread
类中),并从中获取文件名和行号这一点。
编辑:您可能还想创建一个静态函数(您可以将它放在一个实用类中)来执行此操作(这将避免不同java实现的问题):
public static void printCurrentFileAndLine() {
final StackTraceElement[] ste = Thread.currentThread().getStackTrace();
for (int i=0; i<ste.length; i++)
if (ste[i].getMethodName().equals("printCurrentFileAndLine")) {
System.out.println("I just hit file@line: "+ste[i+1].getFileName() +'@'+ ste[i+1].getLineNumber() );
break;
}
}
你只需要打电话:
printCurrentFileAndLine();
答案 1 :(得分:2)
小心使用Thread.getStackTrace()方法,这是一种代价高昂的方法。只需在真正需要时使用它。
有关该内容的更多信息: How Expensive is Thread.getStackTrace()?