【问题标题】:Call trace in javajava中的调用跟踪
【发布时间】:2010-11-04 18:29:41
【问题描述】:

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

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

【问题讨论】:

    标签: java


    【解决方案1】:

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

    【讨论】:

    • Sun 的热点在 windows 上的 vm 似乎没有输出跟踪方法调用。我读过我需要用'java_g'运行java调试。有什么想法吗?
    • 是的,对我来说Runtime.getRuntime().traceMethodCalls(true); 也无济于事。我是否需要将参数传递给javacjava
    • 从 java 版本“1.8.0_111”开始仍然没有
    • Runtime.traceMethodCalls 可能几乎永远不会起作用 - 如果您正在阅读本文,请省去麻烦。
    • 该方法提示Java虚拟机发出调试,如果不支持则一无所有
    【解决方案2】:

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

    Java 中有很多 AOP 框架,例如 AspectJSpring(当然 Spring 远不止 AOP)。

    将方面应用到系统中的每个 方法调用可能会很棘手……我没有任何使用AspectJ 的经验,但Spring AOP 基本上旨在启用围绕组件的AOP。 Spring实际上不知道的类不能轻易更改。请注意,我已经有一段时间没有使用 Spring AOP 了——从那时起事情可能已经发生了 :)

    【讨论】:

      【解决方案3】:

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

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

      我不确定以这种方式检索信息是否是一种好习惯。 :)

      【讨论】:

      • 非常慢,所以在调试时用于本地跟踪。
      【解决方案4】:

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

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

      (明确一点:1)我写的,2)它对我有用:))

      【讨论】:

      • 绝对精彩!试过了,效果很好 :) 感谢这个非常有用的扩展!
      • 如何在 android 项目上使用它?
      • 注意:这不是生产质量。如果您需要在编译后操作代码,请使用面向方面的编程,例如与eclipse.org/aspectj
      【解决方案5】:

      btrace,可用于此类操作。

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

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

            【讨论】:

              猜你喜欢
              • 2013-08-19
              • 2018-12-31
              • 2015-06-05
              • 1970-01-01
              • 1970-01-01
              • 2013-10-05
              • 2011-09-06
              • 2011-07-07
              相关资源
              最近更新 更多