編譯
下載brew然后安裝hg,freetype,ccache
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew install ccache
$ brew install freetype
$ brew install hg
$ hg clone http://hg.openjdk.java.net/jdk/jdk12 openjdk12
$ cd openjdk12
$ chmod +x configure
$ ./configure --enable-ccache --witt-debug-level=server-fastdebug
$ make all #or make hotspot
一切完成后openjdk12/build/macos-x86_64-server-fastdebug
就是編譯產出。
xcode調試
打開xcode創建一個項目,然后選擇macOS,創建一個命令行項目:
然后選中新項目自動創建的文件右鍵刪除
接着配置啟動項。對着停止那個方塊按鈕旁邊的按鈕右鍵Edit Scheme
在運行里面選擇basic configuration,選擇other
這里選擇之前編譯出來的jvm,比如我的目錄是/Users/kelthuyang/Desktop/openjdk12/build/macosx-x86_64-server-fastdebug/jdk/bin
然后選擇Argument給虛擬機加個啟動參數,這里隨便寫個java hello world,然后javac編譯得到字節碼文件,-cp
指定字節碼所在目錄,后面加上類名
然后選中工程add files to project將hotspot源代碼倒入到項目
到這里已經可以運行了,直接運行會出現sigsegv信號,這是正常情況,但是會阻礙調試。可以在lldb中使用process handle SIGSEGV -s false
不過每次運行都需要輸入比較麻煩,可以設置符號斷點忽略sigsegv信號。選擇左邊創建那個箭頭,然后最下面加號選擇symbolic breakpoint
隨便加一個,比如我加的是Threads::create_vm
模塊忽略sigsegv
再次運行,一切順利!