在Eclipse Oxygen中调试Java Class文件:为何无法进入HashMap的put方法?
解决Eclipse中无法调试HashMap.put()的问题
我之前也碰到过一模一样的情况,折腾了好一会儿才找到原因,大概率是下面几个配置或环境问题导致的,咱们一步步排查:
1. 先确认你用的是JDK而非JRE
如果Eclipse配置的是JRE,那核心类(比如HashMap)只有编译后的字节码,没有源码——反编译插件能让你看到代码,但没法支持断点调试。检查方法:
- 打开
Window > Preferences > Java > Installed JREs - 看列表里的条目,要是显示的是
jrexxx就不对,得换成JDK路径(比如jdk1.8.0_291这类) - 要是没有JDK选项,点击
Add选Standard VM,然后指向你的JDK安装目录,把它设为默认
2. 给JDK的rt.jar关联源码
就算用了JDK,有时候源码没关联上,调试器还是没法进入核心类:
- 还是在
Installed JREs界面,选中你的JDK,点击Edit - 在弹出的窗口里找到
rt.jar,双击它的Source Attachment列 - 选择JDK根目录下的
src.zip(一般都在JDK文件夹里),确认后重启Eclipse试试
3. 关掉Eclipse调试的“核心类过滤”
Eclipse默认会跳过JDK核心类的调试步骤,这是最容易踩的坑:
- 打开
Window > Preferences > Java > Debug > Step Filtering - 把
java.*、javax.*这些选项的勾选去掉,至少要确保java.util.HashMap不在过滤列表里 - 调试时也可以临时右键点击断点,选择
Disable Step Filtering,强制进入核心类
4. 检查反编译插件的配置
如果你装了JD-Eclipse或者其他反编译插件,得确保它支持调试:
- 比如JD-Eclipse可以去
Preferences > JD-Eclipse里,勾选允许调试反编译代码的选项 - 别同时装多个反编译插件,容易冲突导致断点失效
5. 确保断点和调试操作正确
有时候是操作问题:
- 调试时,当程序走到
map.put()这一行,要按F5(Step Into)而不是F6(Step Over) - 另外,HashMap的
put()其实是调用了putVal()方法,你也可以直接在反编译后的putVal()上设断点,试试能不能命中
按上面的步骤挨个试,应该就能顺利进入HashMap的put方法内部调试了。
内容的提问来源于stack exchange,提问作者MiniSu
相关产品推荐
相关产品推荐

