当前位置:
首页
文章
后端
详情

OpenJDK源码调试的过程 附详细图文解析

本篇文章主要介绍了关于 Java Open JDK 源码的一个详细过程,从开始搭建虚拟机环境,到最后的调试源码的过程。希望本篇文章能够对大家的学习和工作都有所帮助!

    前言

         随着Java生态愈发庞大,各种各样的新技术层出不穷,这也给大家的学习带来了很多困惑,这么多技术我该学什么,盲目的在各种新技术间穿梭,并不能取得很好的效果。
         作为Java核心技术的JDK相信很多同学都看过源码,了解过Java的内存模型,但是很多时候debug到最后都是 native,这是让人很沮丧的事情,于是乎了解JDK底层的实现变得极为重要。
        编译OpenJDK源码的文章很多,但是很少有从头到尾搭建环境的文章,于是我这里就写了这篇文章,这里涉及的主要步骤:

    虚拟机的安装

    • 虚拟机的安装
    • Ubuntu系统镜像安装
    • Ubuntu系统设置
    • OpenJDK编译
    • Idea在Linux下的安装
    • netbeans在Linux下的安装
    • HotSpot源码调试

    WMware虚拟机安装

    WMware的版本有很多我们这里使用的版本是15.5.1的版本。
    下载链接
    链接: https://pan.baidu.com/s/1IABotf1mFjFMZqXE8yZ1BA 提取码: atzw

    下载软件后,放到指定目录下,双击打开,点击下一步,如下图所示:

    启动安装

    勾选我接受的复选框,点击下一步,如下图所示:

    在这里插入图片描述

    选择待安装vm的磁盘位置,可以自定义,选择磁盘位置后,点击下一步,如下图所示:

    在这里插入图片描述

    去勾选更新和加入体验的复选框,点击下一步,如下图所示:

    在这里插入图片描述

    点击下一步后弹出安装进度,等待安装结束,如下图所示:

    在这里插入图片描述

    到此为止我们就安装成功了,在桌面上找到图标打开即可以使用了,如下图所示:

    在这里插入图片描述

    Ubuntu系统镜像安装

    这里用来安装虚拟的Ubuntu的版本是16.04.6这个版本
    下载链接
    链接: https://pan.baidu.com/s/1X82lDWqBO7HcBD_likFtPQ 提取码: i4y4

    打开VMware虚拟机软件,如下图所示:

    在这里插入图片描述

    选择新建虚拟机,如下图所示:

    在这里插入图片描述

    创建虚拟机,选择典型,然后下一步,如下图所示:

    在这里插入图片描述

    选择已下载的ubuntu-16.04.6-desktop-amd64.iso镜像,然后点击下一步,如下图所示:

    在这里插入图片描述

    填写创建Ubuntu虚拟机所需要的的基本信息,然后点击下一步,如下图所示:

    在这里插入图片描述

    填写虚拟机名称和安装位置,这里建议在较大的盘中创建一个单独的目录进行存储,然后点击下一步,如下图所示:

    在这里插入图片描述

    指定磁盘大小和磁盘文件存储形态,如果只是用来进行简单的调试代码默认的20G足够了,如果后面不够可以在虚拟机设置中对其进行调整,这里我们就设置默认的20G,磁盘存储有两种形式单文件和多文件,多文件格式对于备份异常恢复更好,这里我们选择多文件存储,然后点击下一步,如下图所示:

    在这里插入图片描述

    由于后面在编译OpenJDK时对内存要求较高,这里在自定义硬件中我们将内存调整到4G,然后点击完成,如下图所示:

    在这里插入图片描述
    在这里插入图片描述

    等待Ubuntu安装成功,这个过程大概需要十几分钟,如下图所示:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    Ubuntu系统设置

    网络设置

    输入密码,登录操作系统,如下图所示:

    在这里插入图片描述

    Ubuntu网络设置,使用快捷键(Ctrl+Alt+T)打开命令行窗口,输入ifconfig,查看当前网络配置,如下图所示:

    在这里插入图片描述

    输入route -n,查看网关配置,如下图所示:

    在这里插入图片描述

    查看当前Windows系统的DNS配置,作者使用的是Windows10,如下图所示:

    在这里插入图片描述
    在这里插入图片描述

    设置Ubuntu的网络配置,如下图所示:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    测试使用Ubuntu自带的火狐浏览器是否可以正常访问百度,如下图所示:

    在这里插入图片描述

    共享文件夹设置

    虚拟机Ubuntu和Windows进行文件共享,很多资料使用的都是虚拟机自带的工具VMware Tools,但是很多时候操作过程中会出现很多意想不到的问题造成安装失败,浪费很多时间,这里介绍一种更简单的方式,通过网络共享实现虚拟机文件共享。
    方法如下:

    在Downloads目录下创建一个share文件夹,效果如图所示:

    在这里插入图片描述

    在share文件夹上右键,选择本地网络共享,效果如图所示:

    在这里插入图片描述

    按下图勾选选项,然后点击创建共享按钮,效果如图所示:

    在这里插入图片描述
    在这里插入图片描述

    在windows系统中通过网络找到share共享目录,效果如图所示:

    在这里插入图片描述

    OpenJDK编译

    在编译OpenJDK过程中,需要用到的软件如下:

    jdk-7u80-linux-x64.tar
    下载地址:

    链接: https://pan.baidu.com/s/1LNd2Xkg93bsXDuEVFdjfQQ 提取码: j3ix

    openjdk-8u40-src-b25-10_feb_2015.zip

    下载地址:
    链接: https://pan.baidu.com/s/1eFVhrgmXOZ_oD8uQ_YEiUg 提取码: kqkh

    编译流程

    将需要的安装包放到虚拟机share共享目录,如下图所示:

    在这里插入图片描述

    在Ubuntu虚拟机中解压安装包到Documents目录,如下图所示:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    安装依赖包(按照提示进行操作),大概需要2分钟

    sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
    sudo apt-get install libcups2-dev
    sudo apt-get install libfreetype6-dev
    sudo apt-get install libasound2-dev

    安装vim

    sudo apt-get install vim

    配置path

    vim ~/.bashrc

    在bashrc文件的末尾添加下面代码,其中jdk1.7.0_80路径根据实际情况填写

    export JAVA_HOME=/home/feng/Documents/jdk1.7.0_80
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH

    验证是否配置成功

    source ~/.bashrc
    java -version

    在这里插入图片描述

    执行命令编译OpenJDK8,boot jdk按照实际目录填写

    cd /home/feng/Documents/openjdk/
    sudo bash configure --with-target-bits=64 --with-boot-jdk=/home/feng/Documents/jdk1.7.0_80/ --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0

    如果配置成功会显示如下信息:

    在这里插入图片描述

    执行下面的命令,开始编译,这个时间较长

    sudo make all DISABLE_HOTSPOT_OS_VERSION_CHECK=OK ZIP_DEBUGINFO_FILES=0

    看到下面的画面,证明编译成功

    在这里插入图片描述

    Ubuntu下安装Idea

    我们这里使用的Idea2021.1的社区版。
    下载链接
    链接: https://pan.baidu.com/s/1w8eqjpWHn6J0DYX9TAwQmQ 提取码: ygci

    将下载的idea,放到share共享目录下,并在虚拟机中解压到Documents目录,截图如下:

    在这里插入图片描述

    在当前用户目录下创建Makefile文件

    cd ~
    vim Makefile

    在文件中添加以下代码:

    idea:
    	sh /home/feng/Documents/idea-IC-211.6693.111/bin/idea.sh

    通过make命令启动idea

    make idea

    启动后,点击继续,截图如下:

    在这里插入图片描述

    选择不发送,截图如下:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    Ubuntu下安装NetBeans

    我们这里使用的NetBeans8.2的版本。
    下载链接
    链接: https://pan.baidu.com/s/1k40ZgtSx87rUvLaabazeDA 提取码: 34u9

    将下载的NetBeans,放到share共享目录下,并在虚拟机中复制到桌面,截图如下:

    在这里插入图片描述

    执行以下命令,安装NetBeans

    cd /home/feng/Desktop/
    sudo chown feng:feng jdk-8u111-nb-8_2-linux-x64.sh
    ./jdk-8u111-nb-8_2-linux-x64.sh

    点击下一步,安装NetBeans,如下图所示:

    在这里插入图片描述

    设置默认jdk,点击下一步,如下图所示:

    在这里插入图片描述

    选择初始化目录,点击下一步,如下图所示:

    在这里插入图片描述

    去勾选检查更新,点击安装,如下图所示:

    在这里插入图片描述

    去勾选,点击完成,如下图所示:

    在这里插入图片描述

    点击桌面的NetBeans ISE 8,2启动,如下图所示

    在这里插入图片描述

    安装C/C++插件,如下图所示

    在这里插入图片描述

    选择可用插件,找到C/C++选中,点击安装,如下图所示

    在这里插入图片描述

    点击下一步,安装C/C++插件,如下图所示

    在这里插入图片描述

    勾选同意,点击安装,如下图所示

    在这里插入图片描述

    HotSpot源码调试

    执行下面命令,修改javahome,使用编译好的OpenJDK作为默认JDK

    vim ~/.bashrc

    修改bashrc文件,修改后效果如下图:

    export JAVA_HOME=/home/feng/Documents/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk

    在这里插入图片描述

    执行java -version命令,检查是否修改成功,如果成功,效果如下

    source ~/.bashrc
    java -version

    在这里插入图片描述

    使用NetBeans创建OpenJDK工程,步骤如下:

    在这里插入图片描述

    基于现有的C/C++代码创建工程,选择如下图,点击下一步

    在这里插入图片描述

    选择编译后的OpenJDK的目录,选择定制,选择如下图,点击下一步

    在这里插入图片描述

    按照默认配置,点击下一步,最终点击完成

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    使用Idea,创建一个工程,编写一个测下代码,工程结构,如下图

    package com.feng;
    
    public class Test {
        public static void main(String[] args) {
            String str = "test";
            System.out.println(str);
        }
    }

    在这里插入图片描述

    运行代码进行编译,将class文件生存到class目录下,如下图

    在这里插入图片描述

    NetBeans中配置Test活动,步骤如下:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    编辑Run Command,使用如下参数,效果如图:

    "${OUTPUT_PATH}" -cp "/home/feng/IdeaProjects/Test/target/classes" com.feng.Test

    在这里插入图片描述

    点击应用,然后点击确认,效果如图:

    在这里插入图片描述

    切换到Test,点击运行,这个时候会弹出选择可执行的命令,这里需要选择编译后的OpenJDK中的java命令,效果如图:

    在这里插入图片描述

    启动成功后,会打印出来我们在idea中编写的Test代码的执行结果,如下图所示:

    在这里插入图片描述

    这个时候我们就可以在OpenJDK中添加断点,对OpenJDK进行调试了,在openjdk->jdk->src->share->bin->java.c文件中JavaMain方法处添加断点进行调试,如下图所示:

    在这里插入图片描述

    到这里整个OpenJDK源码调试的过程就结束了,大家如果有什么问题,可以给我留言,大家共同交流进步。

    到此这篇关于 Java 从搭建虚拟机环境到最后调试 OpenJDK 源码详细过程的文章就介绍到这了,想要了解更多相关 OpenJDK 源码的内容请搜索W3Cschool以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!


    免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。

    同类热门文章

    深入了解C++中的new操作符:使用具体实例学习

    C++中的new操作符是动态分配内存的主要手段之一。在程序运行时,我们可能需要动态地创建和销毁对象,而new就是为此提供了便利。但是,使用new也常常会引发一些问题,如内存泄漏、空指针等等。因此,本文将通过具体的示例,深入介绍C++中的new操作符,帮助读者更好地掌握其使用。

    
深入了解C++中的new操作符:使用具体实例学习

    怎么用Java反射获取包下所有类? 详细代码实例操作

    Java的反射机制就是在运行状态下,对于任何一个类,它能知道这个类的所有属性和方法;对于任何一个对象,都能调用这个对象的任意一个方法。本篇文章将通过具体的代码示例,展示如何通过Java反射来获取包下的所有类。

    
怎么用Java反射获取包下所有类? 详细代码实例操作

    了解Java中的volati关键字的作用 以及具体使用方法

    本篇文章将和大家分享一下Java当中的volatile关键字,下面将为各位小伙伴讲述volatile关键字的作用以及它的具体使用方法。

    
了解Java中的volati关键字的作用 以及具体使用方法

    Java Map 所有的值转为String类型

    可以使用 Java 8 中的 Map.replaceAll() 方法将所有的值转为 String 类型: 上面的代码会将 map 中所有的值都转为 String 类型。 HashMap 是 Java

    Java Map 所有的值转为String类型

    员工线上学习考试系统

    有点播,直播,在线支付,三级分销等功能,可以对学员学习情况的监督监控,有源码,可二次开发。支持外网和局域网私有化部署,经过测试源码完整可用!1、视频点播:视频播放,图文资料,课件下载,章节试学,限时免

    员工线上学习考试系统