调试HotSpot的环境配置的资料确实比较少. 想提交patch或者有时候好奇需要深入一下JVM看看具体的实现, 需要配置下开发环境. 这里记录整理一下.
有人写过Mac上配置, Windows的环境没查到,我也没弄过, 估计宇宙第一IDE的Visual Studio应该很好使:-)
0. prerequisites
mercurial
OS环境我选Ubuntu 1604. 首先安装OpenJDK用的SCM工具mercurial
再安装个mercurial pluggin
vim ~/.hgrc
clone repo
|
|
hsdis-amd64.so
这个工具不是必须的, 是用来输出运行时的汇编, 网上下载hsdis-amd64.so, 把路径添加到LD_LIBRARY_PATH.
1. 编译OpenJDK 9
在centos6上碰到不少问题, 在Ubuntu1604比较顺利, 我在多台Ubutun上都很顺利,没有碰到奇怪的问题. 相比以前的jdk7, 现在jdk9编译起来顺利多了. 先安装需要的依赖:
|
|
–with-debug-level=slowdebug 这个选项是编译debug版本.
如果还缺依赖, configure时会报出来,按提示安装即可. make clean 一下再configure.
注意, 这些–with-xxx-xxx的参数, 可能会变, 如果报错, 去autoconf目录里grep一把, 具体解决.
2. 调试
netbeans
如果用netbeans, 用netbeans IDE打开 common/nb_native/下的netbeans工程就可以了. 右键在Projects区里的工程, 设置Debug参数, 比如
gdb
我用netbeans看代码, 用gdb调试, 这里一个gdb脚本例子:
cat myscript.gdb
|
|
运行上面的gdb脚本, 断点处停下来, 看看call stack,
咦, 这里的”??”是什么, 我只是想看看call stack…
做HotSpot的人早帮我们想好了, 在gdb里执行:
|
|
包括Java代码的call stack都清楚的出来了.