概述
在前一篇文章Mac上編譯JDK里我記錄了我編譯openjdk的過程。這一篇(假如我堅持下來了)就是記錄一下用gdb來debug JVM的過程,為將來深入學(xué)習(xí)JVM機(jī)制打下基礎(chǔ)。
但是在上一篇里面,最終的make命令,使用的是make jdk,也就是編譯了一個最小的發(fā)布使用的jdk,并不是我們期望的能夠進(jìn)行源碼調(diào)試的jdk。所以在這之前,我們需要先編譯一個可以源碼調(diào)試的半本,在根目錄下執(zhí)行:
make test-image
等編譯出來之后,跑到j(luò)dk目錄下執(zhí)行java --version確認(rèn)一切都弄好了。
安裝gdb
不幸的一件事是,在Mac上是沒有g(shù)db的,所以需要手動安裝一個gdb,使用
brew install gdb
安裝gdb,不過返回的信息是:

輸入gdb命令果然返回了command not found。看到上面寫著
gdb requiers special privilleges to access Mach ports。
嚇得我以為需要sudo權(quán)限,于是執(zhí)行
sudo brew link gdb
結(jié)果又來了錯誤信息:

這個時候我注意原來安裝不成功是因?yàn)樽C書問題,給gdb簽一個證書就可以了。
首先command+space快捷鍵喚出Mac搜索,如圖:

而后創(chuàng)建一個證書:


有效期可以設(shè)置長一點(diǎn),反正都是自己的電腦:


我們只需要簽名,所以選一個簽名就可以:




最后這里要選擇系統(tǒng):

最后完成了

而后找到剛才創(chuàng)建的證書,雙擊,將信任改為始終信任:


而后在終端輸入:
sudo codesign -s gdb-cert /usr/local/Cellar/gdb/8.2/bin/gdb
后面的這個路徑是怎么來的呢?其實(shí)就是剛才執(zhí)行brew install gdb之后安裝的位置,在執(zhí)行brew link gdb輸出的信息里面就能發(fā)現(xiàn)。
這個時候,我嘗試再一次執(zhí)行brew link gdb,還是收到了錯誤:

我嘗試執(zhí)行了brew doctor:

嗯,有兩個warning,所以按照它給出的建議,執(zhí)行了一下命令:
sudo mkdir -p /usr/local/include /usr/local/sbin
sudo chown -R xxx(替換為用戶名) /usr/local/include /usr/local/sbin
而后執(zhí)行brew link gdb
這個時候執(zhí)行
gdb --version

很好,現(xiàn)在已經(jīng)搞好了。
如果之前找gdb的路徑不太順利,覺得可能找錯了,這個時候你可以再執(zhí)行一下:
sudo codesign -s gdb-cert /usr/local/bin/gdb
我這邊輸出是:

說明我之前就已經(jīng)執(zhí)行成功了。
最后再執(zhí)行
echo "set startup-with-shell off" >> ~/.gdbinit
大功告成。
這一句我也不知道有什么效果,反正就是我沒執(zhí)行的時候也順利得很,不過看到之前提示了執(zhí)行,我就執(zhí)行以下,暫時沒看出來什么效果。
開始debug

這個時候我們就已經(jīng)成功使用gdb啟動了hotspot。