在java中调用跟踪

时间:2009-06-22 06:13:41

标签: java

有没有办法在java中输出特定线程的调用跟踪?

我不想要堆栈跟踪。我希望对每个对象进行一系列调用以进行跟踪。

8 个答案:

答案 0 :(得分:13)

我想你可能会发现这很有趣。它是一个java代理,它为方法添加入口和出口日志记录,使用slf4j框架实际记录输出。然后,配置日志框架只打印出您感兴趣的线程。

http://www.slf4j.org/extensions.html#javaagent

(只是为了明确:1)我写了它,2)它适用于我:))

答案 1 :(得分:11)

btrace,可以用于此类操作。

答案 2 :(得分:4)

如果要跟踪Java代码的执行情况,可以使用名为InTrace的工具。

注意:InTrace是我编写的免费开源工具。

答案 3 :(得分:2)

您基本上需要某种形式的面向方面编程,其中方面可以确定当前线程是否要记录调用。 (另一种方法是自己明确地将记录放在每个方法中,这将是痛苦的。)

Java中有很多AOP框架,例如AspectJSpring(Spring当然比AOP要多得多)。

将方面应用于系统中的每个方法调用可能会很棘手......我对AspectJ没有任何经验,但Spring AOP基本上是为了在组件周围启用AOP。 Spring无法有效的类不容易改变。请注意,自从我使用Spring AOP以来已经有一段时间了 - 从那时起事情可能会发生:)

答案 4 :(得分:2)

我们可以创建一个新的Throwable对象,它将具有调用跟踪。使用一些字符串操作,我们可以获得调用堆栈。

Throwable t = new Throwable();
System.out.println(t.getStackTrace()[1].toString());

我不确定以这种方式检索信息,这是一个很好的做法。 :)

答案 5 :(得分:1)

Runtime.traceMethodCalls(),为所有线程中所有对象的每次方法调用打印一行

答案 6 :(得分:1)

比Btrace使用HouseMD更简单的方法,你可以从here获得

答案 7 :(得分:0)

如果您使用的是IntelliJ,则有一个名为Flameviewer的插件。请在下面的链接中找到更多详细信息,

https://github.com/kornilova-l/FlameViewer#uploading-file-to-flameviewer

相关问题