Compile&Debug openjdk

233 阅读2分钟
原文链接: liuzhengyang.github.io

在编译openjdk的路上走了很多弯路。期间在多个平台尝试编译各个版本,遇到各种错误,最终还是基本完成了。

系统版本

系统版本是10.12.1 Sierra,这里的XCode版本已经是8,并且安装XCode4.5提示版本过低。而openjdk8中configure时必须要使用XCode4版本,故采取openjdk9。

clone

hg clone http://hg.openjdk.java.net/jdk9/jdk9

编译

cd jdk9

修改下get_source.sh文件,由于clone经常断有没有短线重连机制,需要修改下脚本进行自动重试。
将最后几行修改为: 即加上while重试

sh ./common/bin/hgforest.sh clone "$@"
while [ $? -ne 0 ]
do
    sh ./common/bin/hgforest.sh clone "$@"
done
sh ./common/bin/hgforest.sh pull -u

视网络状态好坏时间不一样,下载好后。

执行 get_source.sh

按照必要依赖

当前环境需要freetype等

brew install freetype
brew install ccache

configure

执行configure, 注意freetype/2.8要按照上面的版本进行修改路径

bash ./configure --with-target-bits=64 --with-freetype=/usr/local/Cellar/freetype/2.8 --enable-ccache --with-jvm-variants=server,client --with-boot-jdk-jvmargs="-Xlint:deprecation -Xlint:unchecked"  --disable-warnings-as-errors --with-debug-level=slowdebug 2>&1 | tee configure_mac_x64.log

make

进行make

make all

经过数十分钟左右,make 成功, 在build文件夹下生成出build/macosx-x86_64-normal-serverANDclient-slowdebug文件夹,其中的jdk/bin/目录下的java, javac等就可以使用了。

Debug

在编译完成后,就可以使用gdb进行debug了,不过习惯了用IDE,就下载CLion,Import 其中的hotspot项目,然后修改DebugConfiguration中的hotspot的Executable为build/macosx-x86_64-normal-serverANDclient-slowdebug/jdk/bin/java这个文件,然后删除before launch中的build。
入口在在hotspot/src/share/vm/prims/jni.cpp中的JNI_CreateJavaVM方法。设置断点后就可以进行跟踪调试了。
debughotspot

Cmake刚了解一些,IDE自动导入的很多文件没有链接起来,有很多报红,不过不影响调试,只影响跳转和修改调试。

JDK9中的一些变化

jdk9增加的新特性中经常提到的是模块化,默认使用G1收集器,CMS+ParNew组合已经deprecated。
jdk9迁移指南中有详细说明。

其他

C-C-IDE-support-for-HotSpot-td301840中有openjdk的IDE支持的讨论
55 New Features in JDK 9JDK9中的新特性

参考