OpenJDK8编译调试

本文目标

构建带有调试信息的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 下载地址

JDK Builds from Oracle  选择这个7进去

勾选:Accept License Agreement,并且下载linux版本的

这里把下载的boot jdk放到

2.2 解压

执行命令解压

tar xvf jdk_ri-7u75-b13-linux-x64-18_dec_2014.tar.gz 

得到如下目录:

3、构建JDK

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

这时候只需要把: libX11-dev中的X改为小写的x再执行命令就可以了。

解决了问题后,再次执行 

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

sudo apt-get install bear

执行make命令

bear make all

这个过程遇到的问题比较多,以下一一说明。

 错误0:忽略警告

错误信息:

cc1plus: all warnings being treated as errors

解决方法:

vi hotspot/make/linux/makefiles/gcc.make

注释掉如下这行

bear make all执行成功输出如下:

错误1:操作系统检测失败

报错信息:

*** This OS is not supported: Linux Lincoln 4.15.0-130-generic #134-Ubuntu SMP Tue Jan 5 20:46:26 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

make[5]: *** [check_os_version] Error 1

/home/parallels/workspace/openjdk/jdk-jdk8-b120/hotspot/make/linux/Makefile:234: recipe for target 'check_os_version' failed

解决方法:

vi hotspot/make/linux/Makefile

修改:

SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3%

SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 4% 5%

错误2:make语法不兼容

报错信息:

/usr/bin/make: invalid option -- '8'

/usr/bin/make: invalid option -- '-'

/usr/bin/make: invalid option -- '1'

/usr/bin/make: invalid option -- '2'

/usr/bin/make: invalid option -- '0'

/usr/bin/make: invalid option -- '/'

/usr/bin/make: invalid option -- 'a'

/usr/bin/make: invalid option -- '/'

/usr/bin/make: invalid option -- 'c'

解决方法:

vi hotspot/make/linux/makefiles/adjust-mflags.sh

添加一个大写I

错误3:gcc版本太高

错误信息:

generation.hpp:421:17: error: invalid suffix on literal; C++11 requires a space between literal and string macro [-Werror=literal-suffix]

....省略

left operand of shift expression ‘(-1 << 1)’ is negative [-fpermissive]

解决方法:

根据官方文档()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源:

sudo vi /etc/apt/sources.list

添加以下内容到文件末尾:

#install gcc 4.9

deb http://dk.archive.ubuntu.com/ubuntu/ xenial main

deb http://dk.archive.ubuntu.com/ubuntu/ xenial universe

更新源:

sudo apt-get update

安装4.9版本:

sudo apt install gcc-4.9

sudo apt install g++-4.9

管理多版本gcc:

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

3.3、查看构建结果

以下都是在/home/parallels/workspace/openjdk/jdk-jdk8-b120目录下查找

jdk文件

build/linux-x86_64-normal-server-slowdebug/jdk 目录下就是构建的完成JDK,可以设置为JAVA_HOME作为java使用

执行一下命令可以验证下

./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version

4、Clion中使用

步骤3构建完成后,在目录下有一个compile_commands.json文件,CLion导入工程需要这个文件。

4.1、导入工程:

选择之前生成的:compile_commands.json ,选择open as project

Clion 索引文件需要几分钟(我这里是虚拟机配置不高,需要6,7分钟左右)

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的入口

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值