当前位置:

首页 > 软件教程 > JDK源码调试问题与解决方法分享

JDK源码调试问题与解决方法分享

在研究MyBatis的缓存机制时,探索HashMap的实现原理是必要的。然而,在IntelliJIDEA中单步调试HashMap的put(Kkey,Vvalue)方法时,遇到无法进入方法内部的问题,效果类似于使用StepOver。经过排查,确认这不是快捷键冲突的问题,但始终无法成功进行StepInto操作。最初误以为是IntelliJIDEA不支持调试JDK源码(这种想法现在看来有些天真),于是尝试在eclipse中调试,结果发现虽然可以进入HashMap的put方法内部,但无法查看局部变量

本文目录

    在研究MyBatis的缓存机制时,探索HashMap的实现原理是必要的。然而,在IntelliJ IDEA中单步调试HashMap的put(K key, V value)方法时,遇到无法进入方法内部的问题,效果类似于使用Step Over。经过排查,确认这不是快捷键冲突的问题,但始终无法成功进行Step Into操作。

    最初误以为是IntelliJ IDEA不支持调试JDK源码(这种想法现在看来有些天真),于是尝试在eclipse中调试,结果发现虽然可以进入HashMap的put方法内部,但无法查看局部变量的值。经过搜索发现,JDK源码在编译时已去除调试信息,因此解决方法是重新编译JDK源码。然而,尽管问题得到了解决,总觉得哪里不对劲,因为IntelliJ IDEA作为一款高级IDE,不应该不支持调试JDK源码(毕竟JDK源码与我们编写的Java程序在本质上没有区别)。继续搜索后,发现确实有人遇到相同的问题。原来,IntelliJ IDEA默认关闭了对JDK源码的调试支持,只需简单地开启即可。虽然这个问题本身技术含量不高,但相信很多在跟踪JDK源码实现时的人都可能遇到。因此,我想系统总结一下如何在IntelliJ IDEA中单步调试JDK源码以及在eclipse中调试JDK源码时无法查看局部变量值的解决方法,希望能对阅读此文的读者有所帮助。

    在IntelliJ IDEA中调试JDK源码

    在IntelliJ IDEA中,默认情况下无法单步调试JDK源码,这是因为默认关闭了对JDK源码的调试支持。要解决这个问题,只需开启即可。设置路径如下:"File" -> "Settings" -> "Build, Execution, Deployment" -> "Debugger" -> "Stepping"。在右侧的设置窗口中,可以看到"Do not step into the classes"选项,其中包含了JDK源码包,如下图所示:

    跟踪调试JDK源码时遇到的问题及解决方法

    正如截图中的文字说明,如果希望在IntelliJ IDEA中单步调试JDK源码,只需在"Do not step into the classes"选项中取消对应的Java包名复选框勾选即可。目前还不清楚IntelliJ IDEA为何设置了这个默认限制。

    在eclipse中调试JDK源码

    在eclipse中单步调试JDK源码时,会发现无法显示局部变量的值,这对于跟踪调试非常不便。原因是JDK源码在编译时去除了调试信息。要能够查看局部变量信息,必须手动重新编译JDK源码,并添加调试信息支持。以下是在Windows系统上重新编译JDK源码的步骤:

    1. 进入JDK根目录,解压源码包(src.zip)到当前目录,如下图所示:

    跟踪调试JDK源码时遇到的问题及解决方法

    解压完成后,进入刚刚解压的src目录,删除除java、javax和org之外的所有目录。需要注意的是,实际上只需编译src目录下的java、javax和org目录下的java文件,在编译前需删除其他目录。如果尝试编译所有文件,可能会在中途出错,无法成功编译。

    1. 打开Windows控制台,进入JDK根目录,使用dir命令列出刚刚解压出的src目录中所有java文件的绝对路径,并保存到指定文件。
    > dir D:\sun\jdk-8u121\src\*.java /s /b /x > filelist.txt

    这里使用了dir命令的“/s”、“/b”和“/x”参数,将src目录下的所有java文件的绝对路径保存到filelist.txt文件中。

    1. 重新编译JDK源码,添加调试信息。首先,进入JDK根目录,创建jdk_debug目录,用于保存编译后的class文件。

    跟踪调试JDK源码时遇到的问题及解决方法

    然后,打开Windows控制台,进入JDK根目录路径,执行JDK源码编译。

    > javac -J-Xms16m -J-Xmx1024m -sourcepath src -cp jre\lib\rt.jar -d jdk_debug -g @filelist.txt >>log.txt 2>&1

    命令大致解释如下:编译filelist.txt中列出的src目录下的java类到jdk_debug目录,并将输出日志记录到log.txt文件中。需要注意的是,应使用当前版本的JDK进行编译,不要跨版本编译(例如,使用1.7版本编译1.8版本的JDK)。根据机器性能和编译的java文件数量,编译时间可能会有所不同。

    1. 打开Windows控制台,进入JDK根目录下的jdk_debug路径,打包刚刚编译的class文件到rt_debug.jar。
    > jar cf0 rt_debug.jar *
    1. 将生成的rt_debug.jar包复制到JDK_HOME\jre\lib\endorsed目录。如果没有endorsed目录,请自行创建。

    2. 再次尝试调试源码,发现局部变量已经可以追踪了。

    总结

    对于Java的集成开发环境,IntelliJ IDEA的功能显然比eclipse更加强大。例如,在eclipse中无法查看JDK的某些源码,但IntelliJ IDEA会自动反编译为Java源码,这对于调试非常有帮助。

    【参考】

    [1]. https://blog.csdn.net/daerzei/article/details/79717717 IDEA调试JDK源码的详细过程

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    软件教程 jdk
    相关文章 更多
    Java多版本JDK切换方法详解
    Java多版本JDK切换方法详解

    答案:Java开发中可通过四种方式切换JDK版本。1.手动修改JAVA_HOME和PATH环境变量,适用于所有系统;2.使用shell或批处理脚本快速切换,适合频繁变更的场景;3.利用IntelliJ或Eclipse等IDE的项目级JDK配置,实现多项目独立管理;4.借助SDKMAN!工具管理多个JDK版本,尤其适合Unix-like系统。关键在于确保JAVA_HOME与实际版本一致,并通过java-version验证。

    Java IDE与JDK兼容性验证方法
    Java IDE与JDK兼容性验证方法

    确认IDE与JDK兼容需验证版本匹配、正确配置路径、编译运行新语法特性及构建工具设置一致,确保开发环境正常工作。

    多版本JDK切换方法详解
    多版本JDK切换方法详解

    切换默认Java版本需调整JAVA_HOME和PATH环境变量,确保目标JDK的bin目录优先加载。Windows用户通过系统属性修改环境变量并调整Path顺序,Linux/macOS用户则在shell配置文件中设置exportJAVA_HOME和PATH,并用source生效;也可使用SDKMAN!、jEnv等工具实现自动化管理,提升多版本切换效率。

    安装JDK的CentOS教程
    安装JDK的CentOS教程

    CentOS是一款基于RedHatEnterpriseLinux源代码构建的Linux发行版,因其稳定性和可靠性而备受青睐。在服务器和企业环境中,CentOS广泛应用,它提供了强大的功能和高级安全性,使其成为许多开发人员和系统管理员首选的操作系统之一。JDK是Java开发工具包的缩写,是Java编程语言的核心,包含Java运行时环境(JRE)、Java编译器(javac)、Java虚拟机(JVM)等关键工具。在CentOS系统上进行Java开发,安装JDK是不可或缺的第一步。在CentOS上安装JDK非常

    jdk怎么安装-jdk安装教程
    jdk怎么安装-jdk安装教程

    近期有很多小伙伴咨询小编jdk怎么安装,接下来就让我们一起学习一下jdk怎么安装的全部内容吧,希望可以帮助到大家。1、首先下载JDK安装文件,进入JDK安装界面,如图所示。2、单击“下一步”按钮,进入JDK自定义安装界面,如图所示。3、建议选择直接安装到默认目录,单击“下一步”按钮即可进行安装,如图所示。也可以单击“更改”按钮,自行选择安装目录。4、安装完毕后,弹出界面,单击“关闭”按钮即可,如图所示。上面就是小编为大家带来的jdk怎么安装的全部教程,希望对大家能够有所帮助哦。

    甲骨文正式发布 Java 22、JDK 22,JavaOne 开发者大会 2025 年 3 月 17 日举行
    甲骨文正式发布 Java 22、JDK 22,JavaOne 开发者大会 2025 年 3 月 17 日举行

    本站3月20日消息,甲骨文今日宣布Java22全面推出,同时JDK22也已正式公开,可供生产环境使用。这个版本涵盖了12个JDK增强提案(JEP),其中包括7个预览功能和1个孵化器功能,还有最终版本的外部函数和内存API(JEP454),以及未命名变量和模式(JEP456)。此外,甲骨文还宣布JavaOne回归,并将于2025年3月17日至20日在硅谷园区举行Java交流研讨会。

    win10如何配置jdk环境变量的绝对路径
    win10如何配置jdk环境变量的绝对路径

    我们在配置环境变量的时候,有三个配置目标JAVA_HOME、CLASSPATH、PATH。那么我们在写路径时候就要非常小心,哪怕是少一个符号错一个标点就会配置出错。所以小编就来告诉大家在配置中怎么写绝对路径~希望可以帮助到你。jdk环境变量怎么配置win10绝对路径1、首先右键“此电脑”打开“属性”2、打开左侧“高级系统设置”里的“环境变量”3、然后点击系统变量下的“新建”4、变量名为“JAVA_HOME”,变量值为我们的jdk绝对路径。5、绝对路径下必须看到如图所示的文件。6、然后选中系统变量下的“pa

    Windows 10 JDK环境变量配置详细步骤
    Windows 10 JDK环境变量配置详细步骤

    jdk环境变量配置是学习java的第一步配置,在开发的时候Java程序时肯定是需要引用其他人已经写好的类,而我们在引用别人的类的时候要让解释器知道去哪里引用这个类。下面来看看win10系统下详细的安装配置方法吧。win10详细jdk环境变量配置方法一、安装JDK选择安装目录安装过程中会出现两次安装提示。第一次是安装jdk,第二次是安装jre。建议两个都安装在同一个java文件夹中的不同文件夹中。(不能都安装在java文件夹的根目录下,jdk和jre安装在同一文件夹会出错)二、配置环境变量:右击“我的电脑”

    教你win10如何安装配置jdk环境
    教你win10如何安装配置jdk环境

    jdk(JavaDevelopmentKit),从字面意思翻译过来就是java开发的工具;对于每一位做java开发的朋友来说,jdk是必须要安装的,除了jdk还需要配置jdk的环境变量,系统在不断地更新,小编给大家介绍一下如何在Win10下安装配置jdk环境,就跟小编一同去看看吧。1、首先要打开系统环境变量配置的页面。具体操作是:打开开始菜单,找到“此电脑”,然后右键“更多”→“属性”。2、在弹出的页面,选择“高级系统设置”。3、在弹出的页面,选择“环境变量(N)…”。4、在弹出的页面,系统变量区域,选择

    win10详细jdk环境变量配置如何配置
    win10详细jdk环境变量配置如何配置

    win10详细jdk环境变量配置如何配置?jdk环境变量配置是学习java的第一步配置,在开发的时候Java程序时肯定是需要引用其他人已经写好的类,而我们在引用别人的类的时候要让解释器知道去哪里引用这个类。下面来看看win10系统下详细的安装配置方法吧。win10详细jdk环境变量配置步骤一、安装JDK选择安装目录安装过程中会出现两次安装提示。第一次是安装jdk,第二次是安装jre。建议两个都安装在同一个java文件夹中的不同文件夹中。(不能都安装在java文件夹的根目录下,jdk和jre安装在同一文件夹

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。