Java 月食:“月食”;println(行)&“——”是否存在这样的预处理器宏以编程方式获取代码';谁的电话号码?
注意:要清楚,所问的问题并不是关于“如何在Eclipse中显示行号?” 目标:我想知道Eclipse是否有一个充当Java 月食:“月食”;println(行)&“——”是否存在这样的预处理器宏以编程方式获取代码';谁的电话号码?,java,eclipse,eclipse-plugin,preprocessor,c-preprocessor,Java,Eclipse,Eclipse Plugin,Preprocessor,C Preprocessor,注意:要清楚,所问的问题并不是关于“如何在Eclipse中显示行号?” 目标:我想知道Eclipse是否有一个充当getLineNumber()的宏,就像VisualStudio能够使用预处理器宏\uuuLine\uUn轻松/通用地获取这一行,以确定对getLineNumber()的特定调用的位置。在不使用调试器/断点的情况下,了解是否命中了一行代码非常有用 我想使用:println(“我刚刚点击file@line:“+”文件“+”@“+”行“ 我正在寻找一个可以复制并粘贴到任何文件/任何行的通
getLineNumber()
的宏,就像VisualStudio能够使用预处理器宏\uuuLine\uUn
轻松/通用地获取这一行,以确定对getLineNumber()
的特定调用的位置。在不使用调试器/断点的情况下,了解是否命中了一行代码非常有用
我想使用:println(“我刚刚点击file@line:“+”文件“+”@“+”行“代码>
我正在寻找一个可以复制并粘贴到任何文件/任何行的通用宏,以便在编译时/编译前知道这些值。Java/Eclipse是否提供了这样的功能?可能在Eclipse插件中
我在任何地方都找不到这方面的任何信息,我不知所措。谢谢。你可以试试:
System.out.println("I just hit file@line: "+Thread.currentThread().getStackTrace()[1].getFileName() +'@'+ Thread.currentThread().getStackTrace()[1].getLineNumber());
Thread.currentThread().getStackTrace()
将返回一个StackTraceeElement
数组,我们获取第二个元素(第一个元素将在Thread
类中),并从中获取文件名和行号
编辑:您可能还需要创建一个静态函数(您可以将其放在实用类中)来完成此操作(这将避免不同java实现的问题):
你可以试试:
System.out.println("I just hit file@line: "+Thread.currentThread().getStackTrace()[1].getFileName() +'@'+ Thread.currentThread().getStackTrace()[1].getLineNumber());
Thread.currentThread().getStackTrace()
将返回一个StackTraceeElement
数组,我们获取第二个元素(第一个元素将在Thread
类中),并从中获取文件名和行号
编辑:您可能还需要创建一个静态函数(您可以将其放在实用类中)来完成此操作(这将避免不同java实现的问题):
使用Thread.getStackTrace()方法时要小心,这是一个代价高昂的方法。只要在你真正需要的时候使用它
欲了解更多信息,请:
使用Thread.getStackTrace()方法时要小心,这是一种代价高昂的方法。只要在你真正需要的时候使用它
欲了解更多信息,请:
嗯,我想你说的是语言特性,不是IDE特性<在C++和C++中,代码> >文件> <代码> >代码> java行> 我不确定Java等价物是什么。经过研究,是的,你是完全正确的,它是语言广域网,我想你所说的是语言特性,而不是IDE特性。在C++和C++中,代码> >文件> <代码> >代码> Florent > >代码>。我不确定java等价物是什么。经过研究,是的,你是完全正确的,它的语言很广,谢谢你的快速回答。我在我的Android活动中运行了这个,但我看到了:我刚刚点击了file@line:线程。java@579
。我将尝试输出整个getStackTrace(),以查看我需要的信息是否正确there@unity303我已经在Eclipse下尝试过了,并且成功了,我认为Android java版本可能有点不同,因此您可能需要使用Thread.currentThread().getStackTrace()[2]
,或者类似的东西,我也这么想,在看到堆栈跟踪的整个[]之后,我看到元素[2]在Android上完美地输出。第0个元素是Android虚拟机“VMStack.java@-2”。你完全让我开心。谢谢大家!@很高兴它成功了!我添加了一个静态方法,您可以使用它动态跳过堆栈中所有不需要的部分,无论java实现是什么。感谢您的快速回答Florent。我在我的Android活动中运行了这个,但我看到了:我刚刚点击了file@line:线程。java@579
。我将尝试输出整个getStackTrace(),以查看我需要的信息是否正确there@unity303我已经在Eclipse下尝试过了,并且成功了,我认为Android java版本可能有点不同,因此您可能需要使用Thread.currentThread().getStackTrace()[2]
,或者类似的东西,我也这么想,在看到堆栈跟踪的整个[]之后,我看到元素[2]在Android上完美地输出。第0个元素是Android虚拟机“VMStack.java@-2”。你完全让我开心。谢谢大家!@很高兴它成功了!我添加了一个静态方法,您可以使用它动态地跳过堆栈中所有不需要的部分,不管java实现是什么。我使用nanotime分析了超过100个测试用例。最短的时间是0.2毫秒,但最长的时间是1.2毫秒。为了使它在生产构建中可以忽略不计,如果我在发布构建中,我会完全绕过该方法。我使用nanotime分析了超过100个测试用例。最短的时间是0.2毫秒,但最长的时间是1.2毫秒。为了使它在生产构建中可以忽略不计,如果我在发布构建中,我将完全绕过该方法。
printCurrentFileAndLine();