以下编译的openJdk版本为openjdk13

一、下载源码

第一种方式: Mercurial 版本控制获取 源码(不推荐)

1.1 安装 Mercurial

  1. # 其它系统请看: https://www.mercurial-scm.org/wiki/TutorialInstall
  2. #https://www.mercurial-scm.org/wiki/Download
  3. #注意python版本Python 2.7.13, 不能高于python3
  4. #可以试用sudo update-alternatives --config python切换python版本
  5. sudo apt-get install mercurial

1.2 下载源码

  1. #像从github一样,拷贝仓库文件
  2. hg clone http://hg.openjdk.java.net/jdk/jdk13 jdk13
  3. cd jdk13/
  4. #赋予脚步执行权限
  5. chmod +x get_source.sh
  6. #执行脚步
  7. sh ./get_source.sh

注意:不同的jdk 可在: http://hg.openjdk.java.net/ 中找

第二种:直接下载源码包

可以从以下来两个渠道下载源码压缩包

二、编译源码

编译文档介绍:https://github.com/openjdk/jdk/blob/master/doc/building.md

1. 执行配置脚本

1.1 下载BootJDK: https://jdk.java.net/ (一般下载比编译版本低一个版本,编译jdk13, BootJDK下载jdk12)
  1. wget https://download.java.net/openjdk/jdk12/ri/openjdk-12+32_linux-x64_bin.tar.gz
  2. tar -zxf openjdk-12+32_linux-x64_bin.tar.gz
  3. #解压后目录jdk-12

1.2 下载编译的源码包

  1. wget https://download.java.net/openjdk/jdk13/ri/openjdk-13+33_src.zip
  2. #解压
  3. unzip openjdk-13+33_src.zip -d jdk13
  4. cd jdk13/openjdk

1.3 执行配置

  1. ./configure \
  2. --with-target-bits=64 \
  3. --with-boot-jdk="../../jdk-12" \
  4. --with-jvm-variants=server \
  5. --disable-warnings-as-errors \
  6. --with-debug-level=slowdebug 2>&1 | tee configure_mac_x64.log
  7. #--with-boot-jdk="../../jdk-12" :指定BootJDK
  8. #--with-debug-level=<level> :
  9. releasefastdebugslowde-bug,越往后进行的优化措施就越少,带的调试信息就越多。
  10. 默认值为release
  11. --enable-debug:等效于--with-debug-level=fastdebug
  12. --with-native-debug-symbols=<method>:确定调试符号信息的编译方式,可选值为noneinternalexternalzipped
  13. --with-target-bits=<bits>:指明要编译32位还是64位的Java虚拟机
  14. --with-jvm-variants=<variant>[,<variant>...]:编译特定模式(Variants)的HotSpot虚拟机,可以多个模式并存,可选值为serverclientminimalcorezerocustom
  15. #以下是编译时提示需要安装的依赖
  16. #按照实际情况安装
  17. #sudo apt-get install autoconf
  18. #sudo apt-get install systemtap-sdt-dev
  19. #sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev
  20. #sudo apt-get install libcups2-dev
  21. #sudo apt-get install libfontconfig1-dev
  22. #sudo apt-get install libasound2-dev

出现以下信息则成功
image.png

2. 编译

  1. # 详细make请看:
  2. #https://github.com/openjdk/jdk/blob/master/doc/building.md#running-make
  3. export LANG=C
  4. make clean
  5. make all

出现以下信息则编译成功
image.png

  1. 测试编译好的JDK
    1. cd ./build/linux-x86_64-server-slowdebug/images/jdk/bin
    2. ./java -version
    打印以下信息,则完成编译
    image.png

    三、使用IntellJ Clion 调试源码

    1. 下载CLion: https://www.jetbrains.com/clion/

2. 安装g++ 和gdb 调试工具

  1. sudo apt install g++ gdb

3. 将openjdk 源码整个导入Clion 中

image.png

出现以下信息则完成导入
image.png

注意:导入过程如果出现以下错误

  1. gcc: error trying to exec 'cc1obj': execvp: No such file or directory

安装以下依赖就好了

  1. sudo apt-get install gobjc++

4. 配置

image.png

Executable 选择编译好的java执行程序:

去掉Build
image.png

5. Debuger 运行

在jni.cpp 上打上断点
image.png
CLion 上运行debuger

就可以愉快调试代码了。
这里在debug时,可能直接跳过,不会停留;如果出现则需要检查Toolchain 是否选择gdb调试。
如果还是不行,只能自行google了

参考