У меня есть программа 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 (описанный в моем ответе на этот вопрос) и столкнулся с ошибками при попытке использовать его с более сложными программами.
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
- person Nopslide   schedule 27.03.2017