如何在ECLIPSE中调试.class文件?

6
我正在使用Eclipse 3.5版本,并将src.zip附加到了全局设置中。方法如下: Windows-->Preferences-->Java-->Installed JREs-->rt.jar - Source attachment - ...../jdk/src.zip 我成功地能够进入java核心库的.class文件并查看源代码。我正在构建一个使用LinkedList的类,我已经在LinkedList类中设置了一个断点。
当我调试我的源代码(我的项目)中的断点时,一切正常,但是当我需要进入java核心lib .classes时,在我的Eclipse中出现以下错误: eclipse error 无法在java.util.LinkedList中安装断点,因为缺少行号属性。修改编译器选项以生成行号属性。 我在首选项中检查了我的编译器设置,并发现所有选项都被勾选为真。 enter image description here 如果有人能帮助我解决这个问题,那就太好了。
提前感谢您的帮助。
3个回答

7

您可能已经将编译器设置为在您的类文件中包含调试信息,但 rt.jar 中的类文件并非以此方式编译。您需要重新编译 rt.jar 中所有类的源代码(这对于新手来说不是一件容易的事),或者下载 JDK 的调试版本


运行得非常好。非常感谢。一直在搜索这个。 - Akh
嗨,David...你能告诉我如何更改Java核心的 .classes 并编译它们以供我的项目使用吗?例如:我想将私有变量 -- header -- 修改为公共变量,以便在 LinkedList 类中分配值以进行研究目的?我正在研究 LinkedList 的行为...即使您指向一些资源,我也会很感激。 - Akh
我认为那不是一个好主意,如果你只是想通过研究来访问私有变量,你可以通过反射来实现。例如,去掉异常处理:List<String> list = new LinkedList<String>(); list.add("foo"); Field header = list.getClass().getDeclaredField("header"); header.setAccessible(true); System.out.println(header.get(list)); - David Conrad
谢谢David。让我试试看。 - Akh
对不起,我不知道他们把下载链接移到哪里了。 - David Conrad
显示剩余3条评论

2
这篇博客文章提供了一个全面的检查列表,与Eclipse IDE相关。如果您正在使用Eclipse IDE编译,请按照以下步骤操作:
1. 转到“窗口 > 首选项 > Java > 编译器”屏幕。 2. 确保已选中“将行号属性添加到生成的文件(由调试器使用)”复选框。 3. 再次构建并尝试添加断点,希望它能为您工作。
对于ANT实用程序,请注意以下事项:
1. 检查build.xml文件,并确保在javac任务中将debug属性设置为true。 2. 此外,如果您正在使用JBoss作为应用服务器,请确保您已经打开了一个端口以进行远程机器连接的套接字绑定。如果没有,则只需确保“C:/jboss/bin/run.bat”中有一个条目:
set JAVA_OPTS=%JAVA_OPTS% -Xdebug –Xrunjdwp:transport=dt_socket,address=5000,server=y,suspend=n”,以打开端口5000以便监听所有套接字连接以进行调试/远程Java应用程序。 3. 再次构建并尝试添加断点,希望它能为您工作。

2

不应该使用附带JDR源代码的JRE进行调试,因为JRE类不适合用于调试。

让Eclipse搜索Java环境,然后从结果列表中选择JDK。此Java环境将正确附加src.zip文件,您应该能够进行调查。

请注意,即使是JDK类也没有完整的调试信息可用,因此无法查看局部变量等内容。

(另外,编译器设置面板仅适用于您的代码。 JRE类是预生成的,该面板不会影响它们)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接