Java 通过将类的源代码复制到我的项目来调试rt.jar中的类
我刚刚发现有一种简单的方法可以调试/破解我在项目中使用的第三方库 例如,如果我想从SpringBeans调试Java 通过将类的源代码复制到我的项目来调试rt.jar中的类,java,spring,debugging,Java,Spring,Debugging,我刚刚发现有一种简单的方法可以调试/破解我在项目中使用的第三方库 例如,如果我想从SpringBeans调试org.springframework.beans.factory.support.AbstractBeanDefinition,我需要做的就是在我的项目中用相同的源代码在同一个包中创建这个类的副本。由于我的项目源恰好出现在类路径的前面,ClassLoader将使用它们,而不是来自springbean的源。然后我可以将日志记录/断点/调整添加到标准类行为中,因为源代码现在在我的控制之下 但
org.springframework.beans.factory.support.AbstractBeanDefinition
,我需要做的就是在我的项目中用相同的源代码在同一个包中创建这个类的副本。由于我的项目源恰好出现在类路径的前面,ClassLoader
将使用它们,而不是来自springbean的源。然后我可以将日志记录/断点/调整添加到标准类行为中,因为源代码现在在我的控制之下
但是,这不适用于位于rt.jar中的标准Java类。例如,它不适用于
java.util.HashMap
。有没有办法对rt.jar类使用相同的方法?您必须将替换类放在一个单独的目录或jar文件中,并使用-Xbootclasspath/p
选项将其前置到java
命令的引导类路径。您不应该分发任何使用此机制重写rt.jar
类的代码,但可以用于调试目的
请注意,您应该只为它们真正需要的东西(替换rt.jar中的类的特定类文件)使用引导类路径。应用程序的其余部分应保持在系统类加载器加载的正常类路径上,因为在引导和系统加载器之间可能存在其他加载器(例如,用于扩展),如果代码位于引导类路径上,则无法使用这些加载器