通过将源代码复制到我的项目中来调试rt.jar中的类

时间:2015-05-24 05:56:30

标签: java spring debugging

我刚刚发现有一种简单的方法来调试/破解我在项目中使用的第三方库。

例如,如果我想从spring-beans调试org.springframework.beans.factory.support.AbstractBeanDefinition,我需要做的就是在我的项目中使用相同的源创建此类的副本。由于我的项目源恰好出现在类路径的早期,ClassLoader将使用它们而不是spring-beans中的那些。然后我可以将标记/断点/调整添加到标准类行为,因为源现在在我的控制之下。

但这不适用于位于rt.jar中的标准Java类。例如,它不能与java.util.HashMap一起使用。有没有办法对rt.jar类使用相同的方法?

1 个答案:

答案 0 :(得分:1)

您必须将替换类放在单独的目录或JAR文件中,并使用-Xbootclasspath/p命令的java选项将其添加到 bootstrap 类路径中。您不应该使用此机制分发任何代码来覆盖rt.jar类,但是可以将其用于调试目的。

请注意,您应该只使用引导类路径来实现它们真正需要的东西(用于替换rt.jar中的类的特定类文件)。应用程序的其余部分应保留在系统类加载器要加载的正常类路径上,因为在引导程序和系统加载程序之间可能存在其他加载程序(例如,对于扩展程序),如果它们是代码将无法使用在bootstrap类路径上。

相关问题