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

Java 我可以在动态加载的.jar(使用类加载器)中设置断点吗?,java,intellij-idea,classloader,breakpoints,bytecode,Java,Intellij Idea,Classloader,Breakpoints,Bytecode,我正在编写一个程序,为游戏Minecraft加载.jar,执行一些ASM技巧,将其转储到.class文件的文件夹中,并使用类加载器加载该文件夹(然后启动游戏)。我想在其中一个类文件中设置断点,以帮助调试。在IntelliJ中将Minecraft.jar作为依赖项添加会破坏程序(因为它不会加载修改过的类) 如果可能的话,我该怎么做呢?通常,调试信息是通过javac()添加(或不添加)的,因此如果您没有源代码,或者即使您有,但字节码是在没有调试信息的情况下编译的,也没有办法做到这一点。您可以这样做,

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


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

通常,调试信息是通过
javac
()添加(或不添加)的,因此如果您没有源代码,或者即使您有,但字节码是在没有调试信息的情况下编译的,也没有办法做到这一点。

您可以这样做,但不能直接这样做。您需要做的是在调用(使用)相关JAR的代码部分放置断点,然后进入JAR代码。

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


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

AFAIK,要进行调试,您需要编写代码。您可能想调试一个被修改过的类,这样您就没有代码了。@Sandepjindal IntelliJ 14有一个内置的反编译器,如果这有帮助的话。您有这些类文件的源代码吗?您能再详细一点吗?我不能。了解如何在您喜爱的IDE上设置断点,然后执行此操作。这不是火箭科学。如果使用Eclipse,只需在文档窗格的左边距上单击鼠标右键,弹出菜单上就会显示“切换断点”选项。然后,您必须学习如何在调试模式下启动应用程序。同样,对如何使用您喜爱的IDE进行2分钟的研究。这是显而易见的部分。“单步执行”是什么意思?有许多控件(按钮)可以单步执行代码。它们是:简历、跨过、走出和进入(可能还有其他人)。当然,我严格地说是日食;因此,可能与其他IDE有所不同,但仍然相似。“单步执行”按钮允许您进入特定代码行正在调用的方法内部。我建议您阅读IDE文档。解释这一点比我在这里输入的内容要复杂得多。你仍然可以一步一步地进行,只是没有多大用处。