【发布时间】:2010-11-04 18:29:41
【问题描述】:
有没有办法为 java 中的特定线程输出调用跟踪?
我不想要堆栈跟踪。我想要对每个对象进行一系列调用以进行跟踪。
【问题讨论】:
标签: java
有没有办法为 java 中的特定线程输出调用跟踪?
我不想要堆栈跟踪。我想要对每个对象进行一系列调用以进行跟踪。
【问题讨论】:
标签: java
Runtime.traceMethodCalls(),为所有线程中所有对象的每个方法调用打印一行
【讨论】:
Runtime.getRuntime().traceMethodCalls(true); 也无济于事。我是否需要将参数传递给javac 或java?
Runtime.traceMethodCalls 可能几乎永远不会起作用 - 如果您正在阅读本文,请省去麻烦。
我们可以创建一个新的 Throwable 对象,该对象将具有调用跟踪。并且使用一些字符串操作,我们可以获得调用堆栈。
Throwable t = new Throwable();
System.out.println(t.getStackTrace()[1].toString());
我不确定以这种方式检索信息是否是一种好习惯。 :)
【讨论】:
我想你可能会觉得这很有趣。它是一个 java 代理,向方法添加入口和出口日志记录,使用 slf4j 框架实际记录输出。然后将日志框架配置为仅打印出您感兴趣的线程。
http://www.slf4j.org/extensions.html#javaagent
(明确一点:1)我写的,2)它对我有用:))
【讨论】:
有btrace,可用于此类操作。
【讨论】:
如果您想跟踪 Java 代码的执行,可以使用名为 InTrace 的工具。
注意:InTrace 是我编写的免费开源工具。
【讨论】:
如果您使用 IntelliJ,则有一个名为 Flameviewer 的插件。请在下面的链接中找到更多详细信息,
https://github.com/kornilova-l/FlameViewer#uploading-file-to-flameviewer
【讨论】: