如何调试JVM资源加载?

14

为了调试JVM中的类加载,我们可以使用参数-verbose:class,但是... 有没有人知道如何调试资源加载(例如属性文件)?

5个回答

3
我想您需要考虑使用分析器,或者使用仪器接口的工具。
不确定其稳定性,但有BTrace,它是一种类似于DTrace的Java版本。
BTrace是Java平台的安全动态跟踪工具。BTrace可用于动态跟踪正在运行的Java程序。BTrace动态地为目标应用程序的类注入跟踪代码("字节码跟踪")。跟踪代码用Java编程语言表示。
如果您在开发机器上进行此操作,并且事件数量(加载的资源)不太频繁,则还可以在调试器中设置断点。

@FastSnail:看起来他们已经迁移到Github了。链接已更新。 - Thilo

2
您可以使用 InTrace 来检测执行加载的 Classloader 类。对于 Sun JVM,我建议使用以下包含模式来跟踪相应的类:
  • ClassLoader
  • URLClassPath
  • Loader

2

资源以 URL 形式提供。因此,我猜要在“纯”Java中执行此操作:安装自定义 ClassLoader,将 URL 复制到具有自定义 URLStreamHandler 的版本中。将您的监视代码放在流处理程序中并转发到原始位置。


1

1
在 Linux 环境下,您可以尝试:
lsof -p <jvm pid>

它将为您提供与指定pid相关联的程序使用的描述符列表。

更多信息


2
问题在于许多资源可以从单个JAR文件中加载,这可能只会被打开一次。 - erickson
我同意,在这种情况下,我认为最好的选择是采用ClassLoader解决方案。 - Daniel H.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接