centos7源码编译openjdk11,并使用Clion调试openjdk11源码 源码下载 1 git clone https://github.com/openjdk/jdk.git
切换到openjdk11分支
执行验证
编译工具安装 1 sudo yum groupinstall "Development Tools"
准备openjdk10作为N-1版本启动引导 https://jdk.java.net/archive/
解压
执行安装脚本 1 bash configure --with-boot-jdk=/home/hou/jdk-10.0.1
提示报错1
checking for X11/extensions/shape.h… configure: error: Could not find all X11 headers (shape.h Xrender.h XTest.h Intrinsic.h). You might be able to fix this by running ‘sudo yum install libXtst-devel libXt-devel libXrender-devel libXi-devel’.
执行安装 1 sudo yum install libXtst-devel libXt-devel libXrender-devel libXi-devel
再次执行安装脚本 1 bash configure --with-boot-jdk=/home/hou/jdk-10.0.1
提示报错2
checking cups/ppd.h presence… configure: error: Could not find cups! You might be able to fix this by running ‘sudo yum install cups-devel’.
执行安装 1 sudo yum install cups-devel
再次执行安装脚本 1 bash configure --with-boot-jdk=/home/hou/jdk-10.0.1
提示报错3
configure: error: Could not find fontconfig! You might be able to fix this by running ‘sudo yum install fontconfig-devel’.
执行安装 1 sudo yum install fontconfig-devel
再次执行安装脚本 1 bash configure --with-boot-jdk=/home/hou/jdk-10.0.1
提示报错4
configure: error: Could not find alsa! You might be able to fix this by running ‘sudo yum install alsa-lib-devel’.
执行安装 1 sudo yum install alsa-lib-devel
再次执行安装脚本 1 bash configure --with-boot-jdk=/home/hou/jdk-10.0.1
提示构建成功
执行make,生成镜像
创建成功
验证安装 1 ./build/*/images/jdk/bin/java -version
执行成功
启用调试模式 1 bash configure --with-boot-jdk=/home/hou/jdk-10.0.1 --disable-warnings-as-errors --with-debug-level=slowdebug --with-jvm-variants=server
1 2 3 # disable-warnings-as-errors选项是禁止把warning 当成error # --with-debug-level=slowdebug。用来设置编译的级别,可选值为release、fastdebug、slowde-bug,越往后进行的优化措施就越少,带的调试信息就越多。默认值为release。slowdebug 含有最丰富的调试信息,没有这些信息,很多执行可能被优化掉,我们单步执行时,可能看不到一些变量的值。所以最好指定slowdebug 为编译级别。 # with-jvm-variants 编译特定模式的HotSpot虚拟机,可选值:server、client、minimal、core、zero、custom
编译成功
执行测试 1 ./build/*/images/jdk/bin/java -version
下载Clion导入源码项目 设置自定义编译目标
配置编译命令
配置clean命令
分别配置对应的选项
编辑配置
选中编译的java命令,并执行version
启动运行
启动调试 打断点在java.c上
执行调试
点击继续运行
可以看到运行成功
可以看到报错1
由于HotSpot JVM内部使用了SEGV等信号来实现一些功能(如NullPointerException
、safepoints
等),所以调试过程中,GDB
可能会误报Signal: SIGSEGV (Segmentation fault)
. 解决办法是,在用户目录下创建.gdbinit
,让GDB
捕获SEGV
等信号:
将以下内容追加到文件中并保存:
1 2 handle SIGSEGV pass noprint nostop handle SIGBUS pass noprint nostop
重新运行就没有相关报错了