Как вывести содержимое аргумента метода с помощью OpenJ9 Xtrace Option - PullRequest
3 голосов
/ 22 марта 2019

Справочная информация:

Я хочу регистрировать действия пользователей в 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?

1 Ответ

1 голос
/ 17 июня 2019

Как вывести дамп содержимого аргумента метода с помощью 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().

...