Ubuntu下编译JDK源码并使用clion断点debug

本地环境准备

Ubuntu20.04、jdk8u262-b02、make4.2.1 、gcc 7.5.0、Clion2019.2

开始

之前试过在centOS7.3、win7下build,可能是环境的问题,在win7下无法debug进源码,想着也不是经常debug这玩意,就学习的时候用,那么就用Ubuntu虚拟机搞一个环境供学习用就可以了

下载源码

这次下载一个标准版,进入jdk8u仓库,下载版本jdk8u262-b02
可以使用hg下载,当然我这里为了方便直接点击zip下载,网速慢的使用科学上网
官方仓库地址: https://hg.openjdk.java.net/jdk8u
在这里插入图片描述
在这里插入图片描述
点击zip下载,需要注意的是jdk8u下面还有很多子仓库,需要全部下载才是完整的文件,可以使用get_source.sh脚本下载子仓库下的文件,我这里就直接手工点进去全部下载了,反正也没有几个
在这里插入图片描述
点击子仓库继续下载,按照上面下载的方式继续下载
在这里插入图片描述
下载完成后的目录结构
在这里插入图片描述

配置环境

然后拖到Ubuntu中,再就开始配置环境了,关于环境配置和如何编译,都可以看看源码目录下的README
我这里的: make4.2.1 、gcc 7.5.0
需要注意的是不能使用高版本的gcc,我这里Ubuntu20.04默认的是gcc9,将其降到7,不然编译会报错!
降级过程:

sudo apt install software-properties-common
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80 --slave /usr/bin/g++ g++ /usr/bin/g++-8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7
sudo update-alternatives --config gcc

在这里插入图片描述
配置bootstrap JDK
还需要一个bootstrap JDK,因为源码有些是java写的,需要编译出来。
下载bootstrap JDK,编译JDK8,所以选用JDK7
https://www.oracle.com/java/technologies/javase/javase7-archive-downloads.html

在这里插入图片描述
安装依赖

sudo apt-get install build-essential libxrender-dev xorg-dev libasound2-dev libcups2-dev gawk zip libxtst-dev libxi-dev libxt-dev gobjc

然后config

bash ./configure --with-target-bits=64 --with-num-cores=8 --with-debug-level=slowdebug --with-boot-jdk=/home/root1/jdk1.7.0_80 --enable-debug-symbols ZIP_DEBUGINFO_FILES=0

有了环境后,就进入源码目录下config它,关于这个配置参数,在jdk源码目录下的REAME里面写的很详细
在这里插入图片描述
完成之后是这种的
在这里插入图片描述
如果需要修改什么规格参数,比如版本号之类的,就在build目录下的spec.gmk文件修改

编译

make all

在这里插入图片描述
这样就编译完成了

在clion中debug源码

clion只支持cmake项目,而这个是makefile
我这里直接import为一个cmake项目,它会自动生成cmakelists,打钩那里用默认的即可
在这里插入图片描述
然后配置项目,就是将可执行文件(类似这样的: jdkSource\build\windows-x86_64-normal-server-slowdebug\jdk)替换为我们刚刚编译好的java,注意下面去掉build选项,不在IDE里面build(在IDE里面也build不起来,需要用那个脚本build。。。)
在这里插入图片描述
断点打在java.c的Main中,启动debug,发现就成功命中了,可以断点debug了!

jdk源码下载: https://download.csdn.net/download/w57685321/12456595

猜你喜欢

转载自blog.csdn.net/w57685321/article/details/106326558