我可以在动态加载的.jar(使用ClassLoaders)中设置断点吗?

时间:2014-12-30 17:23:23

标签: java intellij-idea classloader breakpoints bytecode

我正在编写一个程序,为游戏Minecraft加载.jar,执行一些ASM技巧,将其转储到.class文件的文件夹中,然后使用ClassLoader加载该文件夹(然后启动游戏)。我想在其中一个类文件中设置断点,以帮助调试。在MineJ中添加Minecraft .jar作为依赖项会破坏程序(因为它不加载修改后的类)。

如果可能的话,我该怎么做?

3 个答案:

答案 0 :(得分:1)

您可以这样做,但不能直接执行此操作。您需要做的是将断点放在您调用(使用)有问题的JAR的代码部分,然后单步执行JAR代码。

答案 1 :(得分:0)

通常,javacsee options information)添加(或不添加)调试信息因此,如果您没有源代码,或者即使您这样做,但字节码已经编译没有调试信息,就没有办法做到这一点。

答案 2 :(得分:0)

选项一:您可以将JAR添加为依赖项,但将其类型更改为“已提供”。

如果这不起作用:我假设您在项目中配置了许多库。尝试将Minecraft jar的源添加到任何这些库中(项目结构 - >库 - >添加 - >选择带有源文件的jar或目录)。现在,使用Go to class,打开要设置断点的类并设置该断点。如果IntelliJ IDEA不拒绝执行此操作,并且如果ASM操作不会删除调试信息,则在运行时动态加载类时,调试器将在断点处停止。