我有一个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()
请注意,我不希望看到活动堆栈跟踪,例如当前处于活动状态的方法以及导致调用该方法的方法,因为它不会打印出那些不是&#的方法39; t与该方法的调用有关。我希望看到在执行程序期间调用的所有方法,按照它们被调用的顺序。
答案可能会利用任何技术,但我希望它使用某种调试程序,如jdb。原因是因为我已经尝试使用Javassist(described in my answer to this question)的检测,并在使用更复杂的程序时遇到错误。
答案 0 :(得分:0)
您可以尝试Java Flight Recorder。不确定您是否可以按照自己喜欢的方式获取输出,但我们将其用于分析,并显示调用了哪些方法以及哪些方法占用的CPU时间最多。所以肯定有方法录音。