Eclipse:“println(__ LINE__);” - 是否存在这样的预处理器宏以编程方式获取代码的行号?

时间:2014-03-27 03:41:07

标签: java eclipse eclipse-plugin preprocessor c-preprocessor

注意:要明确,问题不在于“如何在Eclipse中显示行号?” That is answered here @ StackOverflow

目标:我想知道Eclipse是否有一个充当getLineNumber()的宏,就像Visual Studio能够使用预处理器宏__LINE__一样轻松/普遍地获取#的行#这个对getLineNumber()的特殊呼吁依然存在。在不使用调试器/断点的情况下,知道是否有一行代码被命中是很有用的。

我想使用println("I just hit file@line: "+__FILE__ +'@'+ __LINE__ );

进行调试

我正在寻找一个可以复制并粘贴到任何文件/任何行的通用宏,以便在编译时/之前知道这些值。 Java / Eclipse是否提供这样的功能?可能在Eclipse插件中?

我无法在任何地方找到任何相关信息,我很茫然。感谢。

2 个答案:

答案 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()?