2009-04-15 54 views
14

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

回答

3

我想你需要看看使用探查器。或者使用仪器接口的东西。

不知道它有多稳定,但有BTrace,这是一种DTrace的Java版本。

BTrace是一个用于Java平台的安全动态跟踪工具。 BTrace可用于动态跟踪正在运行的Java程序。 BTrace动态地测试目标应用程序的类以注入跟踪代码(“字节代码跟踪”)。跟踪代码用Java编程语言表示。

如果你在开发机器上这样做,并且事件数量(被加载的资源)不是太频繁,你也可以在调试器中设置一个断点。

+0

链接是死 – 2015-09-29 06:32:27

+0

@FastSnail:看来他们转移到Github上。链接已更新。 – Thilo 2015-09-29 10:38:10

2

资源提供为URL s。所以,我想在“纯”Java中执行它:安装一个自定义ClassLoader,将URL复制到具有自定义URLStreamHandler的版本中。将您的监控代码放入流处理程序并转发给原始代码。

1

在Linux环境中,你可以尝试:

lsof -p <jvm pid> 

它会给你通过与指定的PID相关联的程序中使用的描述符列表。

More Info

2

你可以使用InTrace仪器类加载器类里面做加载。

对于Sun JVM,我会建议使用以下包含模式追查适当的类:

  • 的ClassLoader
  • URLClassPath
  • 装载机