Java源码-0x00-编译openjdk
1 Sdk编译
前言
- 大于openjdk11u的源码中都含有CompileCommands.gmk,修改即可解决openjdk在Clion中引入头文件问题。
- Java源码换行注释后重新编译一下就行,即可解决class与src对应不上问题。
1.1 源码
Git地址,分支是jdk15-study。
1.2 系统工具
1.2.1 platform
MacOS
macOS Big Sur 11.5.2
Xcode 12.5.1
openjdk 15.0.2
Make 3.81
autoconf (GNU Autoconf) 2.71
Apple clang version 12.0.5 (clang-1205.0.22.11)
ccache version 4.6
freetype-confi 2.12.0
Ubuntu
Ubuntu 22.04.3 LTS
libcups2-dev
libasound2-dev
ArchLinux
6.4.10-arch1-1 (64-bit)
yay
debtap
shell1
2
3
4yay -Ss debtap
yay -S debtap
debtap --versionjdk15
shell1
2sudo debtap -u
sudo debtap jdk-15_linux-x64_bin.debshell1
sudo pacman -U jdk-15-15-1-x86_64.pkg.tar.zst
1.2.2 Boot JDK
1.2.2.1 requirement
https://www.oracle.com/java/technologies/javase/jdk15-archive-downloads.html
1.2.2.2 install
Ubuntu
shell1
2
3
4mkdir -p /home/rui/Documents/softWare/java
cd /home/rui/Documents/softWare/java
cp ~/Downloads/jdk-15_linux-x64_bin.tar.gz ./
tar -zxvf jdk-15_linux-x64_bin.tar.gzthe Boot JDK home is /home/rui/Documents/softWare/java/jdk-15
ArchLinux
shell1
2
3
4
5cd /home/dingrui/Documents/software/jdk
cp ~/Downloads/jdk-15_linux-x64_bin.deb ./
sudo debtap -u
sudo debtap jdk-15_linux-x64_bin.deb
sudo pacman -U jdk-15-15-1-x86_64.pkg.tar.zstthe Boot JDK home is /usr/lib/jvm/jdk-15
1.3 编译
shell scripts for building
1.3.1 字符集修改
1.3.2 配置
1.3.2.1 macos
1 |
|
1.3.2.2 ubuntu
1 |
|
1.3.2.3 ArchLinux
1 |
|
error or warning
Could not find required tool for ZIPEXE
shell1
2sudo pacman -Ss zip
sudo pacman -S zip
1.3.3 编译
1.3.3.1 macos
1 |
|
1.3.3.2 ubuntu
1 |
|
1.3.3.3 ArchLinux
1 |
|
1.3.4 验证编译结果
1.3.4.1 macos
1 |
|
1.3.4.2 ubuntu
1 |
|
1.3.4.3 ArchLinux
1 |
|
1.3.5 重新编译
比如在jdk源码中进行了注释,调试断点错行了,就需要重新编译。
1.3.5.1 macos
1 |
|
1.3.5.2 ubuntu
1 |
|
1.3.5.3 ArchLinux
1 |
|
2 Clion调试
为什么不是使用clion直接open源码根目录,因为那样的方式在clion中代码跳转不了。
如下方式方便跳转阅读代码。
2.1 导入Clion
2.2 源码目录
设置到项目根目录
2.3 配置
2.3.1 build
2.3.2 clean
2.4 构建目标
2.5 LLDB修复
1 |
|
1 |
|
2.6 调试面板配置
2.6.1 Jdk版本
2.6.2 Java文件
2.6.2.1 编译Java代码
这种方式几乎不用,因为我觉得class字节码文件文.java源码文件放在一起太丑了。
2.6.2.2 调试Class文件
我几乎都用这种方式,直接提供javac编译好的class字节码文件。
但是这样的前提最好是保证java和javac的可执行文件版本一致,所以单独新建一个Java项目,使用当前构建出来的jdk作为sdk,指定javac的output目录,将调试流程固化。也就是下面段落3的内容。
3 IDea调试
在调试Jdk源码过程中可能需要追踪c/cpp甚至汇编指令,方便起见新建项目不需要package路径。
3.1 新建项目
注意项
- Build system选择Intellij
- JDK选择自己编译好的SDK