有没有办法确定哪个ClassLoader加载特定的类?或者更具体地说,从特定类加载的位置?
我有一个加载旧的db驱动程序类的情况.我想找到加载旧驱动程序的文件.
我最初的方法是在ClassLoader.loadClass(..)方法上设置一个调试点,并在加载类后停止vm,看看哪个类加载器正在加载它.不幸的是,loadClass方法经常被调用,很难在类加载的地方停止.我将尝试设置断点过滤器.但是,还有另一个问题:由于ClassLoader体系结构,即使ClassLoader不负责加载,也会调用loadClass.
必须有更好的方法来实现我想要的.您是否有想法或建议在哪里寻找解决方案?
你如何推出你的计划?
向命令行添加以下选项会记录正在加载的每个类的位置.
-verbose:class
Run Code Online (Sandbox Code Playgroud)
这些日志通常出现在sysout中.但根据日志记录的配置方式,您可能需要稍微查看一下.
clazz.getProtectionDomain().getCodeSource().getLocation()
Run Code Online (Sandbox Code Playgroud)
明显!(可能是NPE.)
(ClassLoaders可以从多个位置加载类.)
| 归档时间: |
|
| 查看次数: |
2550 次 |
| 最近记录: |