我有一个Java程序(jar文件(,我希望打印出该程序执行期间调用的所有方法。因此,如果Class1.main()
调用Class1.foo1()
,启动Class2,调用Class2.foo2()
和Class2.foo3()
,那么我希望输出
called Class1.main
called Class1.foo1()
called Class2.<init>
called Class2.foo2()
called Class2.foo3()
请注意,我不希望看到活动的堆栈跟踪,例如当前处于活动状态的方法以及导致调用该方法的方法,因为它不会打印出那些与该方法调用无关的方法。我希望看到在程序执行期间调用的所有方法,按调用它们的顺序。
答案可能会利用任何技术,尽管我希望它使用某种调试程序,例如 jdb。这样做的原因是因为我已经尝试将仪器与 Javassist 一起使用(在我对这个问题的回答中描述(,并且在尝试使用更复杂的程序时遇到了错误。
试试Java Flight Recorder。不确定您是否可以按照自己喜欢的方式获得输出,但我们将其用于分析,它显示了调用了哪些方法以及哪些方法使用了最多的 CPU 时间。所以肯定有方法记录。