HotSpot源碼構(gòu)建調(diào)試

HotSpot源碼閱讀和解析

從零開始閱讀HotSpot源碼

一、獲取并構(gòu)建HotSpot 源碼

HotSpot 源碼下載地址:

https://github.com/openjdk/jdk/tree/jdk8-b120

一、準(zhǔn)備環(huán)境

1.1、服務(wù)器資源

操作系統(tǒng):Centos 8.5 x64

操作軟件:CLion(JetBrains的產(chǎn)品)

# cat /proc/version
Linux version 3.10.0-1160.59.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Wed Feb 23 16:47:03 UTC 2022

# uname -a
Linux localhost.localdomain 3.10.0-1160.59.1.el7.x86_64 #1 SMP Wed Feb 23 16:47:03 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

二、下載源碼(OpenJDK8)

1.安裝hg 服務(wù)

yum install mercurial -y

2.使用hg 下載openjkd到 opt 目錄

cd /opt 

3.更新代碼,操作和Git類似

cd /opt/jdk8u
hg pull

4.獲取完整源碼(下載時(shí)間較長)

sh get_source.sh

三、編譯源碼

1.將jdk-7u80-linux-x64.tar.gz文件上傳到linux

使用Xftp 7 或者 rz 命令上傳文件工具即可:
上傳到linux下的:/opt/tools/目錄下

2.解壓jdk7到/opt 目錄下

cd /opt/tools
tar -zxf jdk-7u80-linux-x64.tar.gz -C /opt

3.配置

cd /opt/jdk8u
chmod -x configure

4.安裝編譯所需要的工具包

yum install -y unzip zip libXtst-devel libXt-devel libXrender-devel cups-devel freetype-devel alsa-lib-devel fontconfig-devel
yum group info 'Development Tools'
yum groupinstall -y “Development Tools”

5.配置編譯環(huán)境

./configure --with-target-bits=64 --with-boot-jdk=/opt/jdk1.7.0_80/ --with-debug-level=slowdebug --with-native-debug-symbols=internal

配置說明:
–with-target-bits=64 :指定?成64位jdk;
–with-boot-jdk=/opt/jdk1.7.0_80/:jdk7的路徑;
–with-debug-level=slowdebug:編譯時(shí)debug的級(jí)別,有release, fastdebug, slowdebug 三種級(jí)別;

6.編譯(編譯時(shí)間較長、耐心等待)

make all

7.測(cè)試

./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version
openjdk version "1.8.0-internal-debug"
OpenJDK Runtime Environment (build 1.8.0-internal-debug-root_2022_06_14_21_00-b00)
OpenJDK 64-Bit Server VM (build 25.71-b00-debug, mixed mode)

8.復(fù)制拷貝一份

zip jdk8u.zip jdk8u -r

四、Windows 遠(yuǎn)程調(diào)試

1.linux環(huán)境準(zhǔn)備

yum install cmake -y
yum install gcc-c++ -y
yum install gdb -y
yum install gdb-gdbserver -y

2.Windows環(huán)境準(zhǔn)備

1.首先用Clion新建一個(gè)空項(xiàng)目
image.png
2.設(shè)置遠(yuǎn)程調(diào)試
image.png
image.png
image.png
3.同步代碼(windows上的代碼需要和CentOS上的代碼一樣)連接信息
image.png
4.對(duì)應(yīng)目錄,本地目錄為新建的OpenJDK8項(xiàng)目目錄
image.png
5.同步時(shí)要排除本地目錄
image.png
6.下載遠(yuǎn)程代碼(下載之后linux上的代碼,可能會(huì)丟失某些文件,所以先把linxu的源碼備份一次)
image.png

image.png

image.png
7.設(shè)置遠(yuǎn)程調(diào)試,地址為CentOs地址,端口隨意
image.png

image.png
8.Linux環(huán)境準(zhǔn)備
將jdk8u還原
unzip jdk8u.zip
linux啟動(dòng)GDB,端口與之前的對(duì)應(yīng)(1234)
gdbserver :1234 /opt/jdk8u/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version
image.png
linux啟動(dòng)1234端口(防火墻)
vi /etc/sysconfig/iptables
略
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1234 -j ACCEPT
重啟防?墻
service iptables restart
4.打上斷點(diǎn),啟動(dòng)的Debug(比較慢,載入libjvm.debuginfo的時(shí)候)
image.png

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

相關(guān)閱讀更多精彩內(nèi)容

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