IDE如何调试编译的java代码

IDE如何调试编译的java代码,java,debugging,intellij-idea,Java,Debugging,Intellij Idea,当我在intellij中使用gradle构建文件并在调试模式下运行时,我可以设置断点并逐步调试应用程序。我想知道,如果源代码被编译成类,那怎么可能呢?在web开发中,我们有一种称为源代码映射的东西,它与Java世界中的类似吗?两种解决方案: 将源代码附加到已编译的Java代码;如果您使用像gradle或maven这样的构建工具,您的IDE通常会下载源代码以及“二进制jar”,因此即使在这种情况下,您也可以设置断点;否则,您可以手动附加源(在这种情况下,请确保与源和二进制版本匹配!) 想法14.

当我在intellij中使用
gradle
构建文件并在调试模式下运行时,我可以设置断点并逐步调试应用程序。我想知道,如果源代码被编译成类,那怎么可能呢?在web开发中,我们有一种称为源代码映射的东西,它与Java世界中的类似吗?

两种解决方案:

  • 将源代码附加到已编译的Java代码;如果您使用像gradle或maven这样的构建工具,您的IDE通常会下载源代码以及“二进制jar”,因此即使在这种情况下,您也可以设置断点;否则,您可以手动附加源(在这种情况下,请确保与源和二进制版本匹配!)
  • 想法14.+如果你没有源代码,有一个内置的反编译器;您可以使用反编译的结果并设置断点

IDEA可以做到第1点,@Michal说Eclipse也可以;我怀疑NetBeans也允许这样做。至于第2点,我只知道IDEA。

您可以反编译Java代码,可以使用JDGUI之类的外部工具,也可以使用IDE插件。我不知道Intellij的想法,但在Eclipse中,您可以在调试时附加源代码。谢谢!事实上,我的问题就是由这个决定的。我正在使用Android Studio进行调试,我想知道它是否已经包含了您指定的选项2的所有内容,知道如何检查吗?嗯,不知道。。。我不做安卓;)你不能附加来源吗?对不起,什么来源?附在这里?啊,对不起,那么我误解了这个问题。您确定应该命中此断点吗?您确定这些是您链接到的正确来源吗?是的,它肯定会被击中,因为我可以看到变量的值。实际上,更有趣的部分是从更新-新发现开始的-你读过吗?