【问题标题】:Debug classes in rt.jar by copying their source to my project通过将源代码复制到我的项目来调试 rt.jar 中的类
【发布时间】:2017-03-03 04:38:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: java spring debugging


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-09
      • 2015-07-06
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 2022-12-22
      相关资源
      最近更新 更多