概述
在前一篇文章Mac上编译JDK里我记录了我编译openjdk的过程。这一篇(假如我坚持下来了)就是记录一下用gdb来debug JVM的过程,为将来深入学习JVM机制打下基础。
但是在上一篇里面,最终的make命令,使用的是make jdk,也就是编译了一个最小的发布使用的jdk,并不是我们期望的能够进行源码调试的jdk。所以在这之前,我们需要先编译一个可以源码调试的半本,在根目录下执行:
make test-image
等编译出来之后,跑到jdk目录下执行java --version确认一切都弄好了。
安装gdb
不幸的一件事是,在Mac上是没有gdb的,所以需要手动安装一个gdb,使用
brew install gdb
安装gdb,不过返回的信息是:
brew install gdb
输入gdb命令果然返回了command not found。看到上面写着
gdb requiers special privilleges to access Mach ports。
吓得我以为需要sudo权限,于是执行
sudo brew link gdb
结果又来了错误信息:
sudo brew link gdb
这个时候我注意原来安装不成功是因为证书问题,给gdb签一个证书就可以了。
首先command+space快捷键唤出Mac搜索,如图:
command + space
而后创建一个证书:
创建证书菜单
gdb-cert(这个名字后面用到)
有效期可以设置长一点,反正都是自己的电脑:
有效期设置
证书信息
我们只需要签名,所以选一个签名就可以:
只勾选签名
只勾选代码签名
什么都不选 采用默认设置
最后这里要选择系统:
选择系统
最后完成了
证书创建完成
而后找到刚才创建的证书,双击,将信任改为始终信任:
找到证书
信任证书
而后在终端输入:
sudo codesign -s gdb-cert /usr/local/Cellar/gdb/8.2/bin/gdb
后面的这个路径是怎么来的呢?其实就是刚才执行brew install gdb之后安装的位置,在执行brew link gdb输出的信息里面就能发现。
这个时候,我尝试再一次执行brew link gdb,还是收到了错误:
brew link gdb再次报错
我尝试执行了brew doctor:
brew doctor
嗯,有两个warning,所以按照它给出的建议,执行了一下命令:
sudo mkdir -p /usr/local/include /usr/local/sbin
sudo chown -R xxx(替换为用户名) /usr/local/include /usr/local/sbin
而后执行brew link gdb
这个时候执行
gdb --version
gdb输出版本信息
很好,现在已经搞好了。
如果之前找gdb的路径不太顺利,觉得可能找错了,这个时候你可以再执行一下:
sudo codesign -s gdb-cert /usr/local/bin/gdb
我这边输出是:
再次给gdb签名
说明我之前就已经执行成功了。
最后再执行
echo "set startup-with-shell off" >> ~/.gdbinit
大功告成。
这一句我也不知道有什么效果,反正就是我没执行的时候也顺利得很,不过看到之前提示了执行,我就执行以下,暂时没看出来什么效果。
开始debug
gdb启动hotspot这个时候我们就已经成功使用gdb启动了hotspot。
网友评论