如何在java代码中查看线程的位置

如何在java代码中查看线程的位置,java,debugging,Java,Debugging,您是否可以从程序中打印出代码中的哪一行以及正在运行的线程所使用的方法,而无需使用visualvm之类的监控软件?你必须延长线吗 您可以通过呼叫来完成此操作。它返回一个表示当前堆栈跟踪的stackTraceeElement数组。记住顶部的成对元素将是线程中的方法,这将很有帮助,因此您可能感兴趣的元素将位于数组的下方 当然,您需要获得当前正在运行的线程 Thread.getCurrentThread().getStackTrace() 如果这只是为了快速而肮脏的调试或错误报告,您可以这样做 new

您是否可以从程序中打印出代码中的哪一行以及正在运行的线程所使用的方法,而无需使用visualvm之类的监控软件?你必须延长线吗

您可以通过呼叫来完成此操作。它返回一个表示当前堆栈跟踪的
stackTraceeElement
数组。记住顶部的成对元素将是
线程中的方法,这将很有帮助,因此您可能感兴趣的元素将位于数组的下方

当然,您需要获得当前正在运行的
线程

Thread.getCurrentThread().getStackTrace()

如果这只是为了快速而肮脏的调试或错误报告,您可以这样做

new Exception().printStackTrace()

如果您想更喜欢这个,可以使用
Thread.currentThread().getStackTrace()
来获得
StackTraceeElement
对象的数组;您可以通过检查这些行来确定当前行号。

只需使用,它将打印堆栈(类似于异常未捕获时)。无需创建新的异常。

使用几乎任何日志框架,大多数都支持线程组/名称、类、方法、文件名和行号功能,您可以签出。显示了使用它调试并发问题的示例。也只是展示了它的一些基本功能。它相当不错,我相信它应该已经在您的JAVA_主页/垃圾箱中


另一种选择是查看,我没有尝试过这个,但它看起来相当不错。

“如何查看线程在代码中的位置…”为什么要查看线程在代码中的位置(具有任意约束)?这支持什么程序功能?如果一个线程在一个网络调用中被卡住,并且有许多不同的网络调用,了解哪一个是很有帮助的,你想做什么?是否有您试图处理的特定问题,或者这只是出于好奇而提出的更一般的问题?StackTraceeElement将位于位置[1]而不是[0]。