【发布时间】:2017-03-28 00:40:05
【问题描述】:
我有一个 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 (described in my answer to this question) 中使用检测,但在尝试使用更复杂的程序时遇到了错误。
【问题讨论】:
-
你不应该发布重复的问题,即使一个是“任何技术”而另一个是“特定技术”。它仍然是重复的。
-
@Nopslide 而不是说它坏了,可能会显示实际发生的错误;可能是无关的。
-
@Eugene 错误信息:
Exception in thread "main" Throwable$WrappedPrintStream java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: Could not initialize class java.lang.invoke.CallSite at sun.net.www.protocol.http.HttpURLConnection.getNetProperty(Unknown So urce) at sun.net.www.protocol.http.HttpURLConnection.<clinit>(Unknown Source) Caused by: java.lang.NoClassDefFoundError: Could not initialize class java.lang.invoke.CallSite -
@Nopslide 问一个新问题怎么样?
标签: java reverse-engineering jdb