如何使用OpenJ9 Xtrace选项转储方法参数的内容



>背景:

我想在 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:tmpmytrace.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()是一种克隆 指定的存储库。

然后我用-clean选项启动了 Eclipse,克隆了一个存储库,然后退出 Eclipse。 我用traceformat命令转换了mytrace.trc,并在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;),但没有JGit克隆的URI。

问题:

如何使用 OpenJ9 Xtrace 选项转储方法参数的内容?

如何使用 OpenJ9 Xtrace 转储方法参数的内容 选择?

您的选项仅启用进入退出异常方法跟踪跟踪点。方法参数在不同的跟踪点下打印。如果改用此选项,则应看到包含参数的其他跟踪条目。

但是,虽然原始参数的值显示在跟踪中,但当参数是对象时,您将只能看到 Java 堆上对象的地址。例如,在跟踪对*.println()的调用时,您将看到如下所示的内容:

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

我的理解是,这种限制是由于 Xtrace 引擎的体系结构,以及解析字符串等对象并将其存储在跟踪缓冲区中的性能影响。

虽然地址对于在 Java 堆中查找感兴趣的对象非常有用,例如,在使用 Eclipse Memory Analyzer 查看关联的系统转储时,Xtrace 无法提供您所期望的功能。

另一种方法是使用 Java 代理在运行时修改(检测)org/eclipse/jgit/api/CloneCommand类,以将日志记录代码添加到.setURI()方法。

相关内容

  • 没有找到相关文章

最新更新