Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 月食:“月食”;println(行)&“——”是否存在这样的预处理器宏以编程方式获取代码';谁的电话号码?_Java_Eclipse_Eclipse Plugin_Preprocessor_C Preprocessor - Fatal编程技术网

Java 月食:“月食”;println(行)&“——”是否存在这样的预处理器宏以编程方式获取代码';谁的电话号码?

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:“+”文件“+”@“+”行“ 我正在寻找一个可以复制并粘贴到任何文件/任何行的通

注意:要清楚,所问的问题并不是关于“如何在Eclipse中显示行号?”

目标:我想知道Eclipse是否有一个充当
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();