4

您能否在程序中打印出代码中的哪一行以及正在运行的线程使用什么方法——而不使用诸如 visualvm 之类的监控软件?你必须扩展线程吗?

4

5 回答 5

3

如果这只是为了快速调试或错误报告,你可以这样做

new Exception().printStackTrace()

如果你想比这更花哨一点,你可以使用Thread.currentThread().getStackTrace()来获取对象数组StackTraceElement;您可以通过检查这些来确定当前的行号。

于 2012-08-04T01:45:17.717 回答
2

只需使用Thread.dumpStack(),它会打印出堆栈(类似于未捕获异常时)。无需创建新异常。

于 2012-08-04T03:52:12.350 回答
2

使用几乎任何日志框架,大多数都支持线程组/名称、类、方法、文件名和行号功能

于 2012-08-04T04:26:06.673 回答
1

您可以通过调用 来做到这一点Thread.getStackTrace()StackTraceElement它返回一个表示当前 StackTrace的数组。记住前几个元素将是 in 中的方法会很有帮助Thread,因此您可能感兴趣的那些将在数组的下方。

当然,您需要掌握Thread当前正在运行的...

Thread.getCurrentThread().getStackTrace()
于 2012-08-04T01:44:43.253 回答
0

您可以查看JDB此链接显示了使用它来调试并发问题的示例。也只是展示了它的一些基本功能。它相当不错,我相信它应该已经在你的 JAVA_HOME/bin 中了。

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

于 2012-08-04T06:04:39.347 回答