OpenJDK源碼調試圖文教程

前言

     隨著Java生態愈發龐大,各種各樣的新技術層出不窮,這也給大傢的學習帶來瞭很多困惑,這麼多技術我該學什麼,盲目的在各種新技術間穿梭,並不能取得很好的效果。
     作為Java核心技術的JDK相信很多同學都看過源碼,瞭解過Java的內存模型,但是很多時候debug到最後都是 native,這是讓人很沮喪的事情,於是乎瞭解JDK底層的實現變得極為重要。
    編譯OpenJDK源碼的文章很多,但是很少有從頭到尾搭建環境的文章,於是我這裡就寫瞭這篇文章,這裡涉及的主要步驟:

虛擬機的安裝

  • 虛擬機的安裝
  • Ubuntu系統鏡像安裝
  • Ubuntu系統設置
  • OpenJDK編譯
  • Idea在Linux下的安裝
  • netbeans在Linux下的安裝
  • HotSpot源碼調試

WMware虛擬機安裝

WMware的版本有很多我們這裡使用的版本是15.5.1的版本。
下載鏈接
鏈接: https://pan.baidu.com/s/1IABotf1mFjFMZqXE8yZ1BA 提取碼: atzw

下載軟件後,放到指定目錄下,雙擊打開,點擊下一步,如下圖所示:

啟動安裝

勾選我接受的復選框,點擊下一步,如下圖所示:

在這裡插入圖片描述

選擇待安裝vm的磁盤位置,可以自定義,選擇磁盤位置後,點擊下一步,如下圖所示:

在這裡插入圖片描述

去勾選更新和加入體驗的復選框,點擊下一步,如下圖所示:

在這裡插入圖片描述

點擊下一步後彈出安裝進度,等待安裝結束,如下圖所示:

在這裡插入圖片描述

到此為止我們就安裝成功瞭,在桌面上找到圖標打開即可以使用瞭,如下圖所示:

在這裡插入圖片描述

Ubuntu系統鏡像安裝

這裡用來安裝虛擬的Ubuntu的版本是16.04.6這個版本
下載鏈接
鏈接: https://pan.baidu.com/s/1X82lDWqBO7HcBD_likFtPQ 提取碼: i4y4

打開VMware虛擬機軟件,如下圖所示:

在這裡插入圖片描述

選擇新建虛擬機,如下圖所示:

在這裡插入圖片描述

創建虛擬機,選擇典型,然後下一步,如下圖所示:

在這裡插入圖片描述

選擇已下載的ubuntu-16.04.6-desktop-amd64.iso鏡像,然後點擊下一步,如下圖所示:

在這裡插入圖片描述

填寫創建Ubuntu虛擬機所需要的的基本信息,然後點擊下一步,如下圖所示:

在這裡插入圖片描述

填寫虛擬機名稱和安裝位置,這裡建議在較大的盤中創建一個單獨的目錄進行存儲,然後點擊下一步,如下圖所示:

在這裡插入圖片描述

指定磁盤大小和磁盤文件存儲形態,如果隻是用來進行簡單的調試代碼默認的20G足夠瞭,如果後面不夠可以在虛擬機設置中對其進行調整,這裡我們就設置默認的20G,磁盤存儲有兩種形式單文件和多文件,多文件格式對於備份異常恢復更好,這裡我們選擇多文件存儲,然後點擊下一步,如下圖所示:

在這裡插入圖片描述

由於後面在編譯OpenJDK時對內存要求較高,這裡在自定義硬件中我們將內存調整到4G,然後點擊完成,如下圖所示:

在這裡插入圖片描述
在這裡插入圖片描述

等待Ubuntu安裝成功,這個過程大概需要十幾分鐘,如下圖所示:

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

Ubuntu系統設置

網絡設置

輸入密碼,登錄操作系統,如下圖所示:

在這裡插入圖片描述

Ubuntu網絡設置,使用快捷鍵(Ctrl+Alt+T)打開命令行窗口,輸入ifconfig,查看當前網絡配置,如下圖所示:

在這裡插入圖片描述

輸入route -n,查看網關配置,如下圖所示:

在這裡插入圖片描述

查看當前Windows系統的DNS配置,作者使用的是Windows10,如下圖所示:

在這裡插入圖片描述
在這裡插入圖片描述

設置Ubuntu的網絡配置,如下圖所示:

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

測試使用Ubuntu自帶的火狐瀏覽器是否可以正常訪問百度,如下圖所示:

在這裡插入圖片描述

共享文件夾設置

虛擬機Ubuntu和Windows進行文件共享,很多資料使用的都是虛擬機自帶的工具VMware Tools,但是很多時候操作過程中會出現很多意想不到的問題造成安裝失敗,浪費很多時間,這裡介紹一種更簡單的方式,通過網絡共享實現虛擬機文件共享。
方法如下:

在Downloads目錄下創建一個share文件夾,效果如圖所示:

在這裡插入圖片描述

在share文件夾上右鍵,選擇本地網絡共享,效果如圖所示:

在這裡插入圖片描述

按下圖勾選選項,然後點擊創建共享按鈕,效果如圖所示:

在這裡插入圖片描述
在這裡插入圖片描述

在windows系統中通過網絡找到share共享目錄,效果如圖所示:

在這裡插入圖片描述

OpenJDK編譯

在編譯OpenJDK過程中,需要用到的軟件如下:

jdk-7u80-linux-x64.tar
下載地址:

鏈接: https://pan.baidu.com/s/1LNd2Xkg93bsXDuEVFdjfQQ 提取碼: j3ix

openjdk-8u40-src-b25-10_feb_2015.zip

下載地址:
鏈接: https://pan.baidu.com/s/1eFVhrgmXOZ_oD8uQ_YEiUg 提取碼: kqkh

編譯流程

將需要的安裝包放到虛擬機share共享目錄,如下圖所示:

在這裡插入圖片描述

在Ubuntu虛擬機中解壓安裝包到Documents目錄,如下圖所示:

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

安裝依賴包(按照提示進行操作),大概需要2分鐘

sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
sudo apt-get install libcups2-dev
sudo apt-get install libfreetype6-dev
sudo apt-get install libasound2-dev

安裝vim

sudo apt-get install vim

配置path

vim ~/.bashrc

在bashrc文件的末尾添加下面代碼,其中jdk1.7.0_80路徑根據實際情況填寫

export JAVA_HOME=/home/feng/Documents/jdk1.7.0_80
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH

驗證是否配置成功

source ~/.bashrc
java -version

在這裡插入圖片描述

執行命令編譯OpenJDK8,boot jdk按照實際目錄填寫

cd /home/feng/Documents/openjdk/
sudo bash configure --with-target-bits=64 --with-boot-jdk=/home/feng/Documents/jdk1.7.0_80/ --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0

如果配置成功會顯示如下信息:

在這裡插入圖片描述

執行下面的命令,開始編譯,這個時間較長

sudo make all DISABLE_HOTSPOT_OS_VERSION_CHECK=OK ZIP_DEBUGINFO_FILES=0

看到下面的畫面,證明編譯成功

在這裡插入圖片描述

Ubuntu下安裝Idea

我們這裡使用的Idea2021.1的社區版。
下載鏈接
鏈接: https://pan.baidu.com/s/1w8eqjpWHn6J0DYX9TAwQmQ 提取碼: ygci

將下載的idea,放到share共享目錄下,並在虛擬機中解壓到Documents目錄,截圖如下:

在這裡插入圖片描述

在當前用戶目錄下創建Makefile文件

cd ~
vim Makefile

在文件中添加以下代碼:

idea:
	sh /home/feng/Documents/idea-IC-211.6693.111/bin/idea.sh

通過make命令啟動idea

make idea

啟動後,點擊繼續,截圖如下:

在這裡插入圖片描述

選擇不發送,截圖如下:

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

Ubuntu下安裝NetBeans

我們這裡使用的NetBeans8.2的版本。
下載鏈接
鏈接: https://pan.baidu.com/s/1k40ZgtSx87rUvLaabazeDA 提取碼: 34u9

將下載的NetBeans,放到share共享目錄下,並在虛擬機中復制到桌面,截圖如下:

在這裡插入圖片描述

執行以下命令,安裝NetBeans

cd /home/feng/Desktop/
sudo chown feng:feng jdk-8u111-nb-8_2-linux-x64.sh
./jdk-8u111-nb-8_2-linux-x64.sh

點擊下一步,安裝NetBeans,如下圖所示:

在這裡插入圖片描述

設置默認jdk,點擊下一步,如下圖所示:

在這裡插入圖片描述

選擇初始化目錄,點擊下一步,如下圖所示:

在這裡插入圖片描述

去勾選檢查更新,點擊安裝,如下圖所示:

在這裡插入圖片描述

去勾選,點擊完成,如下圖所示:

在這裡插入圖片描述

點擊桌面的NetBeans ISE 8,2啟動,如下圖所示

在這裡插入圖片描述

安裝C/C++插件,如下圖所示

在這裡插入圖片描述

選擇可用插件,找到C/C++選中,點擊安裝,如下圖所示

在這裡插入圖片描述

點擊下一步,安裝C/C++插件,如下圖所示

在這裡插入圖片描述

勾選同意,點擊安裝,如下圖所示

在這裡插入圖片描述

HotSpot源碼調試

執行下面命令,修改javahome,使用編譯好的OpenJDK作為默認JDK

vim ~/.bashrc

修改bashrc文件,修改後效果如下圖:

export JAVA_HOME=/home/feng/Documents/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk

在這裡插入圖片描述

執行java -version命令,檢查是否修改成功,如果成功,效果如下

source ~/.bashrc
java -version

在這裡插入圖片描述

使用NetBeans創建OpenJDK工程,步驟如下:

在這裡插入圖片描述

基於現有的C/C++代碼創建工程,選擇如下圖,點擊下一步

在這裡插入圖片描述

選擇編譯後的OpenJDK的目錄,選擇定制,選擇如下圖,點擊下一步

在這裡插入圖片描述

按照默認配置,點擊下一步,最終點擊完成

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

使用Idea,創建一個工程,編寫一個測下代碼,工程結構,如下圖

package com.feng;

public class Test {
    public static void main(String[] args) {
        String str = "test";
        System.out.println(str);
    }
}

在這裡插入圖片描述

運行代碼進行編譯,將class文件生存到class目錄下,如下圖

在這裡插入圖片描述

NetBeans中配置Test活動,步驟如下:

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

編輯Run Command,使用如下參數,效果如圖:

"${OUTPUT_PATH}" -cp "/home/feng/IdeaProjects/Test/target/classes" com.feng.Test

在這裡插入圖片描述

點擊應用,然後點擊確認,效果如圖:

在這裡插入圖片描述

切換到Test,點擊運行,這個時候會彈出選擇可執行的命令,這裡需要選擇編譯後的OpenJDK中的java命令,效果如圖:

在這裡插入圖片描述

啟動成功後,會打印出來我們在idea中編寫的Test代碼的執行結果,如下圖所示:

在這裡插入圖片描述

這個時候我們就可以在OpenJDK中添加斷點,對OpenJDK進行調試瞭,在openjdk->jdk->src->share->bin->java.c文件中JavaMain方法處添加斷點進行調試,如下圖所示:

在這裡插入圖片描述

到這裡整個OpenJDK源碼調試的過程就結束瞭,大傢如果有什麼問題,可以給我留言,大傢共同交流進步。

到此這篇關於OpenJDK源碼調試的文章就介紹到這瞭,更多相關OpenJDK源碼調試內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀:

    None Found