You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Eclipse调试中正确查看并单步执行sun.*包代码?

解决Eclipse调试Java 8 sun.*包源码的问题

我之前也碰到过一模一样的困扰——Oracle JDK 8不带sun.*包的源码,用反编译插件又总是行号对不上,根本没法正常单步调试。结合Windows环境和Java 8不能换的限制,给你几个亲测有效的方案:

方案一:换成OpenJDK 8(最稳妥的解决办法)

OpenJDK 8自带完整的sun.*包源码,而且和Oracle JDK 8的字节码几乎完全一致,调试时行号100%匹配,操作步骤也很简单:

  • 下载和你当前Oracle JDK 8小版本尽量接近的OpenJDK 8(比如你用的是jdk1.8.0_291,就找同版本的OpenJDK)
  • 打开Eclipse,依次点击Window > Preferences > Java > Installed JREs,点击Add按钮,选择Standard VM,然后指向OpenJDK的安装目录完成添加
  • 把你的项目的编译环境和运行环境都切换到这个OpenJDK:右键项目 > Properties > Java Build Path > Libraries,替换原来的JRE System Library为刚添加的OpenJDK;再去Run/Debug Configurations里把JRE也换成它
  • 之后调试sun.*包的代码时,就能直接看到原生源码,单步执行完全没问题

方案二:给Oracle JDK关联OpenJDK的源码包(不用替换JDK)

如果不想换JDK,只给现有Oracle JDK关联OpenJDK的源码也能解决行号问题:

  • 下载对应版本的OpenJDK 8源码包(一般是src.zip格式)
  • 打开Eclipse的Installed JREs配置,找到你正在用的Oracle JDK,点击Edit
  • 在弹出的窗口里,展开rt.jar,选中Source attachment这一项,点击右侧的Edit,选择External location,然后指向你下载的src.zip文件
  • 保存配置后,调试时Eclipse会自动用OpenJDK的源码对应Oracle JDK rt.jar里的字节码,行号完全匹配,因为两者的编译逻辑是一致的

方案三:修复反编译插件的行号同步问题

如果前两个方案你都不想试,那可以尝试调整反编译插件的设置来解决行号不匹配:

  • 如果你用的是JD-Eclipse插件:打开Window > Preferences > Java > JD-Eclipse,找到Line number synchronization选项,确保它是勾选状态;如果还是不行,尝试更新插件到兼容Java 8的最新版本
  • 换用Fernflower反编译插件:这个插件的行号还原更准确,Eclipse里可以直接安装集成版,安装后在插件设置里开启行号保留功能
  • 另外,有些时候Eclipse的调试过滤会影响单步执行,你可以打开Window > Preferences > Java > Debug > Step Filtering,取消勾选一些不必要的过滤项,比如Filter synthetic methods,或者遇到无法进入的方法时,右键选择Step Into Special强制进入

额外注意事项

调试sun.*包的代码时,偶尔会遇到权限限制提示,这时候可以在调试配置的VM参数里加上-Dsun.reflect.debugModuleAccessChecks=true(Java 8里这个参数能放宽一些内部类的访问限制),或者在Eclipse里允许访问受限制的代码:打开Window > Preferences > Java > Compiler > Errors/Warnings,找到Deprecated and restricted API,把Forbidden reference (access rules)改成Warning或者Ignore

内容的提问来源于stack exchange,提问作者John29

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:57:05