概述
在前一篇文章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,不过返回的信息是:
![](https://img.haomeiwen.com/i2579123/ca563fe794d3e94a.png)
输入gdb命令果然返回了command not found。看到上面写着
gdb requiers special privilleges to access Mach ports。
吓得我以为需要sudo权限,于是执行
sudo brew link gdb
结果又来了错误信息:
![](https://img.haomeiwen.com/i2579123/10c6293a705db7cf.png)
这个时候我注意原来安装不成功是因为证书问题,给gdb签一个证书就可以了。
首先command+space快捷键唤出Mac搜索,如图:
![](https://img.haomeiwen.com/i2579123/2ae8e0a590fc8044.png)
而后创建一个证书:
![](https://img.haomeiwen.com/i2579123/fa74c4ff6da69d79.png)
![](https://img.haomeiwen.com/i2579123/c2998c16a70c2eea.png)
有效期可以设置长一点,反正都是自己的电脑:
![](https://img.haomeiwen.com/i2579123/f49987d14e4196de.png)
![](https://img.haomeiwen.com/i2579123/b0f48e3fa1117568.png)
我们只需要签名,所以选一个签名就可以:
![](https://img.haomeiwen.com/i2579123/c8bffaf08c557fc2.png)
![](https://img.haomeiwen.com/i2579123/6a6308ed3989a2d4.png)
![](https://img.haomeiwen.com/i2579123/a7d33f5e5d72408c.png)
![](https://img.haomeiwen.com/i2579123/ba15afd717a20b75.png)
最后这里要选择系统:
![](https://img.haomeiwen.com/i2579123/d0b49b0ef6a1b253.png)
最后完成了
![](https://img.haomeiwen.com/i2579123/24e6eb2eeb2cbeec.png)
而后找到刚才创建的证书,双击,将信任改为始终信任:
![](https://img.haomeiwen.com/i2579123/eb029169ba28f318.png)
![](https://img.haomeiwen.com/i2579123/34bd06f4bb6082b6.png)
而后在终端输入:
sudo codesign -s gdb-cert /usr/local/Cellar/gdb/8.2/bin/gdb
后面的这个路径是怎么来的呢?其实就是刚才执行brew install gdb之后安装的位置,在执行brew link gdb输出的信息里面就能发现。
这个时候,我尝试再一次执行brew link gdb,还是收到了错误:
![](https://img.haomeiwen.com/i2579123/1439bd9f5500af5a.png)
我尝试执行了brew doctor:
![](https://img.haomeiwen.com/i2579123/ae916bf64a6a2126.png)
嗯,有两个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
![](https://img.haomeiwen.com/i2579123/356515b242087262.png)
很好,现在已经搞好了。
如果之前找gdb的路径不太顺利,觉得可能找错了,这个时候你可以再执行一下:
sudo codesign -s gdb-cert /usr/local/bin/gdb
我这边输出是:
![](https://img.haomeiwen.com/i2579123/5d62d15cf6d835ea.png)
说明我之前就已经执行成功了。
最后再执行
echo "set startup-with-shell off" >> ~/.gdbinit
大功告成。
这一句我也不知道有什么效果,反正就是我没执行的时候也顺利得很,不过看到之前提示了执行,我就执行以下,暂时没看出来什么效果。
开始debug
![](https://img.haomeiwen.com/i2579123/d362f82d6224e58b.png)
这个时候我们就已经成功使用gdb启动了hotspot。
网友评论