編譯可調(diào)試的 OpenJDK8

2020.12.07 更新

CLion 調(diào)試代碼的方式有問題,在代碼中打斷點的位置和代碼執(zhí)行的位置不一致,調(diào)試體驗很差。
現(xiàn)在已經(jīng)不用Clion調(diào)試代碼了,改為采用VSCode,可正常debug。

請閱讀文章 使用VSCode調(diào)試OpenJDK8


以 Manjaro 20.1 為例

系統(tǒng)環(huán)境

?  ~ uname -r
5.4.57-1-MANJARO
?  ~ make -version
GNU Make 4.3
?  ~ gcc -v
...
gcc version 10.2.0 (GCC) 
?  ~ g++ -v
...
gcc version 10.2.0 (GCC) 

安裝必要的編譯、調(diào)試軟件

  • CLion C and C++ IDE
  • compiledb Tool for generating Clang's JSON Compilation Database file for GNU make-based build systems
  • Building the JDK 編譯需要的安裝包參考
  • mercurial sudo pacman -S mercurial
  • OracleJDK7 作為編譯OpenJDK8 的 bootSDK

獲取源碼

需要掛梯子

# 根據(jù)自己的實際情況配置
export ALL_PROXY=socks5://127.0.0.1:1080
# 這里最好用jdk8u, 不容易出問題
hg clone http://hg.openjdk.java.net/jdk8u/jdk8u/
# 進入目錄
cd jdk8u
# 執(zhí)行腳本,拉取所有代碼
bash ./get_source.sh

配置源碼

# 移除環(huán)境變量配置
unset JAVA_HOME
# 生成debug版本的 openjdk8
bash ./configure --enable-debug --enable-debug-symbols --disable-zip-debug-info --with-boot-jdk=/home/zero/Documents/Java/jdk1.7.0_80

編譯源碼

# 源碼里將所有的warn處理為error。 這里必須配置WARNINGS_ARE_ERRORS=""
# compiledb 是為了生成 compile_commands.json
compiledb make WARNINGS_ARE_ERRORS="" images 

CLion 導入項目

File -> Open 選擇 compile_commands.json -> 選擇 open as project

CLion 運行、調(diào)試設置

詳見 custom-build-targets

GDB 配置

vim ~/.gdbinit

handle SIGSEGV nostop noprint pass
handle SIGBUS nostop noprint pass
handle SIGFPE nostop noprint pass
handle SIGPIPE nostop noprint pass
handle SIGILL nostop noprint pass

參考資料

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容