【问题标题】:Recording every function call of a program in Java记录Java程序的每个函数调用
【发布时间】:2022-01-25 19:43:18
【问题描述】:

我想记录 Java 程序(包括线程/进程)的每个函数调用(时间戳和函数名称) 在 Python 中,我可以简单地使用一个分析器来记录程序中的函数条目,如下所示:

def tracefunc(frame, event, arg, indent=[0]):
      if event == "call":
          indent[0] += 2
          print("-" * indent[0] + "> call function", frame.f_code.co_name)
      elif event == "return":
          print("<" + "-" * indent[0], "exit function", frame.f_code.co_name)
          indent[0] -= 2
      return tracefunc

在我的代码中,我将其用作:

import sys
import tracer

sys.setprofile(tracer.tracefunc)

我想知道 Java 中是否有类似的东西。还是我需要使用其他东西?注意我要记录一个大程序比如Cassandra

【问题讨论】:

    标签: java logging profiling


    【解决方案1】:

    JVM 无法跟踪所有方法调用。它曾经在旧的 JVMPI 分析接口中可用到 Java 1.4,但它阻止了热点编译,这使得它无法测量实际性能。

    跟踪方法调用的唯一方法是检测感兴趣的类。这可以通过 Java 代理或本机 JVMTI 代理来完成。此外,还有一些开箱即用的工具可以做到这一点。例如,JProfiler 在 CPU 视图中有一个调用跟踪器:

    免责声明:我公司开发 JProfiler。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 2010-10-11
      相关资源
      最近更新 更多