Как вывести содержимое аргумента метода с помощью OpenJ9 Xtrace Option

Фон:

Я хочу регистрировать действия пользователей в Eclipse, например, какие git-репозитории клонировали пользователи, когда возникали конфликты слияний и так далее.

Я придумал использовать опцию OpenJ9 -Xtrace. Во-первых, чтобы проверить возможности опций OpenJ9 -Xtrace, я сделал следующие опции в OpenJ9: Xtrace Option Builder и добавил эти опции в eclipse.ini войти в клонированные репозитории git.

-Xtrace:none,maximal={mt{entry},mt{exit},mt{exception}},methods={org/eclipse/jgit/api/CloneCommand.setURI(),org/eclipse/jgit/api/CloneCommand.call()},output="C:\tmp\mytrace.trc"
-Xjit:exclude={org/eclipse/jgit/api/CloneCommand.setURI*|org/eclipse/jgit/api/CloneCommand.call*}
  • org/eclipse/jgit/api/CloneCommand.setURI() это метод для установки URI для клонированного репозитория в EGit/JGit.
  • org/eclipse/jgit/api/CloneCommand.call() метод для клонирования указанного хранилища

Затем я запустил Eclipse с -clean опцию, клонировать репозиторий и выйти из Eclipse. Я преобразовал mytrace.trc с traceformat команда, и получил этот вывод в mytrace.trc.fmt:

                Trace Formatted Data 

Time (UTC)          Thread ID          Tracepoint ID       Type        Tracepoint Data
07:56:41.541990300 *0x0000000001fafe00 mt.0                Entry      >org/eclipse/jgit/api/CloneCommand.setURI(Ljava/lang/String;)Lorg/eclipse/jgit/api/CloneCommand; bytecode method, this = 0x7f9788a98
07:56:41.541991900  0x0000000001fafe00 mt.6                Exit       <org/eclipse/jgit/api/CloneCommand.setURI(Ljava/lang/String;)Lorg/eclipse/jgit/api/CloneCommand; bytecode method
07:56:41.542010000  0x0000000001fafe00 mt.0                Entry      >org/eclipse/jgit/api/CloneCommand.call()Lorg/eclipse/jgit/api/Git; bytecode method, this = 0x7f9788a98
07:56:46.512616000  0x0000000001fafe00 mt.6                Exit       <org/eclipse/jgit/api/CloneCommand.call()Lorg/eclipse/jgit/api/Git; bytecode method
07:56:47.631399600  0x0000000001fafe00 dg.262              Debug       ***** Thread termination - trace purged *****

Этот вывод показывает setURI() у метода есть аргумент (Ljava/lang/String;), но нет URI, который JGit клонировал.

Вопрос:

Как я могу вывести содержимое аргумента метода с опцией OpenJ9 Xtrace?

0 ответов

Как я могу вывести содержимое аргумента метода с опцией OpenJ9 Xtrace?

Ваш параметр включает только точки трассировки входа, выхода и исключения. Аргументы метода печатаются под другой точкой трассировки. Если вы используете эту опцию вместо этого, вы должны увидеть дополнительные записи трассировки, содержащие аргументы.

Однако, хотя значения примитивных аргументов отображаются в трассировке, когда аргумент является объектом, вы увидите только адрес объекта в куче Java. Например, при отслеживании звонков *.println() вы увидите что-то вроде этого:

15:31:13.710 0x33acc00              mt.18       - this: java/io/PrintStream@00000000FFF04AE0 method arguments: (java/lang/String@00000000E0002768)

Насколько я понимаю, это ограничение связано с архитектурой механизма Xtrace и влиянием на производительность разрешения таких объектов, как Strings, и их хранения в буферах трассировки.

Хотя адреса могут быть чрезвычайно полезны для поиска объектов, представляющих интерес, в куче Java, например, при использовании Eclipse Memory Analyzer для просмотра соответствующего системного дампа, Xtrace не может обеспечить функциональность, на которую вы нацелены.

Альтернативный подход заключается в использовании агента Java для изменения (инструмента) org/eclipse/jgit/api/CloneCommand класс во время выполнения, чтобы добавить код регистрации в .setURI() метод.

Другие вопросы по тегам