如何打印出Java程序执行期间调用的所有方法?

如何打印出Java程序执行期间调用的所有方法?,java,reverse-engineering,jdb,Java,Reverse Engineering,Jdb,我有一个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() 称为Class1.main 称为C

我有一个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()
称为Class1.main
称为Class1.foo1()
叫做Class2。
称为Class2.foo2()
称为Class2.foo3()
请注意,我不希望看到活动堆栈跟踪,例如当前活动的方法和导致调用该方法的方法,因为它不会打印出与该方法调用无关的方法。我希望看到在程序执行期间调用的所有方法,按照调用顺序排列


答案可能会利用任何技术,尽管我希望它使用某种调试程序,比如jdb。这样做的原因是,我已经尝试在Javassist()中使用指令插入,但在使用更复杂的程序时遇到了错误。

您可以尝试一下。不确定是否可以按您喜欢的方式获得输出,但我们将其用于分析,它显示了调用了哪些方法以及哪些方法使用了最多的CPU时间。所以肯定有方法录音。

你可以试试。不确定是否可以按您喜欢的方式获得输出,但我们将其用于分析,它显示了调用了哪些方法以及哪些方法使用了最多的CPU时间。所以肯定有方法记录。

你不应该发布重复的问题,即使一个是“任何技术”,另一个是“特定技术”。它仍然是一个重复的幻灯片,而不是说它坏了,可能会显示实际发生的错误;可能与此无关。@Eugene错误消息:
线程“main”抛出的异常$WrappedPrintStream java.lang.BootstrapMethodError:java.lang.NoClassDefFoundError:无法在sun.net.www.protocol.http.HttpURLConnection.getNetProperty上初始化类java.lang.invoke.CallSite(未知源)在sun.net.www.protocol.http.HttpURLConnection.(未知来源)上,原因是:java.lang.NoClassDefFoundError:无法初始化类java.lang.invoke.CallSite
@nopsiled问一个新问题怎么样?你不应该发布重复的问题,即使一个是“任何技术”而另一个是“特定技术”。它仍然是一个重复的幻灯片,而不是说它坏了,可能会显示实际发生的错误;可能与此无关。@Eugene错误消息:
线程“main”抛出的异常$WrappedPrintStream java.lang.BootstrapMethodError:java.lang.NoClassDefFoundError:无法在sun.net.www.protocol.http.HttpURLConnection.getNetProperty上初始化类java.lang.invoke.CallSite(未知源)在sun.net.www.protocol.http.HttpURLConnection.(来源不明)上,原因是:java.lang.NoClassDefFoundError:无法初始化类java.lang.invoke.CallSite
@nopsiled问一个新问题怎么样?