本文目标
构建带有调试信息的OpenJDK
使用图形化界面调试OpenJDK
环境
OS: Ubuntu 18.04.5 LTS
内核:4.15.0-130-generic
要编译的JDK: jdk8
步骤
1、下载要编译的JDK8版本
1.1、筛选tag: 打开github:https://github.com/openjdk/jdk/,筛选一下下一步需要构件的版本的tag
1.2、下载代码
可以使用git clone。也可以点击点击Download Zip,这里使用Download Zip的方式。
注意:如果选择git clone注意只需要clone这个tag的就行。如果clone所有的代码量比较大,会很慢。
这里把下载的代码放到:/home/parallels/workspace/openjdk 目录下
1.3、解压
执行 unzip jdk-jdk8-b120.zip 命令解压,得到如下目录:
2、下载boot JDK
JDK里面除了c、c++的代码以外还有很多java的代码,需要用一个能使用的JDK来编译(这个JDK就叫做boot JDK)。一般都是选择一个要构建版本的上一个发布版本。比如咱们要构建JDK8,就需要下载一个JDK7的release版本作为 boot JDK。
2.1、下载地址如下:https://jdk.java.net/ 选择这个7进去
勾选:Accept License Agreement,并且下载linux版本的
这里把下载的boot jdk放到
2.2、解压
执行命令解压
tar xvf jdk_ri-7u75-b13-linux-x64-18_dec_2014.tar.gz
得到如下目录:
3.1、环境检测
切换目录到
cd /home/parallels/workspace/openjdk/jdk-jdk8-b120
执行构建命令
sh ./configure --with-target-bits=64 --with-jvm-variants=server --with-debug-level=slowdebug --disable-zip-debug-info --with-boot-jdk=/export/soft/java-se-7u75-ri/
参数解释:
--with-target-bits=64: 构建64的JDK
--with-jvm-variants=server :构建server模式的JDK
--with-debug-level=slowdebug: slowdebug带有更多的调试信息
--disable-zip-debug-info:禁止压缩调试信息,可以方便调试
--with-boot-jdk=/export/soft/java-se-7u75-ri/ :表示boot jdk的路径,就是刚才下载的jdk7的路径
可能遇到的问题:
这个步骤会检测当前的操作系统以及一些依赖的组件是否存在。如果依赖的组件不存在会在命令行给出提示,根据提示安装就可以。
这里要注意的一个是如果提示:sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
这时候只需要把
解决了问题后,再次执行
sh ./configure --with-target-bits=64 --with-jvm-variants=server --with-debug-level=slowdebug --disable-zip-debug-info --with-boot-jdk=/export/soft/java-se-7u75-ri/
这个过程可能要循环好几次:遇到组件未安装-->根据提示安装--->再运行上面的命令--->根据提示安装。
命令执行成功的结果如下: 会输出要构建的信息
3.2、make构建
安装 bear
bear主要是用来生成 compilation database。用来给后续Clion使用,如果使用gdb调试不适用Clion的图形化调试可以不用bear
执行make命令
bear make all
这个过程遇到的问题比较多,以下一一说明。
错误1:操作系统检测失败
解决方法:
错误2:make语法不兼容
报错信息:
解决方法:
添加一个大写I
错误3:gcc版本太高
错误信息:
解决方法:
根据官方文档()http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html,构建jdk8需要gcc 4.3。
本机的是7.5.0。所以需要降低版本
安装gcc和g++ 4.9版本
修改apt源:
添加以下内容到文件末尾:
更新源:
安装4.9版本:
sudo apt install gcc-4.9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20
切换到4.9版本:
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
注意:切换完gcc的版本后需要重新运行之前命令
sh ./configure --with-target-bits=64 --with-jvm-variants=server --with-debug-level=slowdebug --disable-zip-debug-info --with-boot-jdk=/export/soft/java-se-7u75-ri/
再执行
make clean
bear make all
错误4:忽略警告
错误信息:
解决方法:
注释掉如下这行
bear make all执行成功输出如下:
3.3、查看构建结果
以下都是在/home/parallels/workspace/openjdk/jdk-jdk8-b120目录下查找
jdk文件
执行一下命令可以验证下
./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version
Compilation database
4、Clion中使用
4.1、导入工程:
选择之前生成的:compile_commands.json ,选择open as project
Clion 索引文件需要几分钟(我这里是虚拟机配置不高,需要
4.2、生成Run Configurations and Build Targets
选择:File | Settings
第④步点击三个点
点击 "+"
再次点击 "+"
选择刚才创建的make 和 make clean
4.3、Custom Run/Debug configurations
4.4、打断点
找到arguments.cpp 如下位置打个断点,点击debug。
从图中还可以看出来,java.c是java的入口
如果大家编译的时候遇到问题,可以留言讨论。