CentOS 8.1安裝Visual Studio Code調試OpenJDK

編譯最新OpenJDK

繼上一篇文章《Java工程師嚐鮮:編譯最新OpenJDK
之後,內心還是很慌亂:編譯個JDK太簡單了,似乎沒有任何技術含量,本篇繼續編譯之後的工作,一步一步搭建一個調試JDK的環境。

環境準備

環境說明

項目 版本 說明
VMware 15.5 Windows上安裝Linux系統必備
操作系統 CentOS 8.1 CentOS最新社區開源版本
基礎JDK 13.0.2 運行java程序及編譯最新JDK需要
Visual Studio Code 1.43.2 for Linux 調試需要的工具鏈
Linux登錄用戶 peterchen 在使用時用${user}替換,指代當前登錄用戶的用戶名

安裝環境

VMware安裝

下載地址:
https://my.vmware.com/en/web/vmware/info/slug/desktop_end_user_computing/vmware_workstation_pro/15_0?wd=&eqid=95cf61ac00012630000000065e8ad569
安裝步驟:
請查看百度經驗:
https://jingyan.baidu.com/article/e2284b2ba81236e2e6118d89.html

Visual Studio Code 安裝

官網教程地址:
https://code.visualstudio.com/docs/setup/linux#_rhel-fedora-and-centos-based-distributions
安裝步驟
1.打開終端
在這裏插入圖片描述
2.切換用戶
從當前登錄用戶切換到root用戶

su -

然後輸入root用戶密碼
在這裏插入圖片描述
3.配置dnf源

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'

4.進行安裝
如果因爲網絡問題中斷請多試幾次

cd /opt
sudo dnf check-update
sudo dnf install code

5.創建桌面快捷方式
查看安裝目錄

whereis code

在這裏插入圖片描述
注意這個目錄:/usr/share/code
另外visual studio code的圖標文件在:/usr/share/code/resources/app/resources/linux 目錄下

創建快捷方式

vim /usr/share/applications/VSCode.desktop

添加以下內容:

[Desktop Entry]
Name=Visual Studio Code
Comment=Multi-platform code editor for Linux
Exec=/usr/share/code/bin/code
Icon=/usr/share/code/resources/app/resources/linux/code.png
Type=Application
StartupNotify=true
Categories=TextEditor;
MimeType=text/plain;

:wq!保存退出
將快捷方式複製到當前登錄用的桌面:

cp /usr/share/applications/VSCode.desktop /home/${user}/Desktop

在這裏插入圖片描述
修改權限

chown ${user} /home/${user}/Desktop/VSCode.desktop

設置允許快捷方式執行
在這裏插入圖片描述
如果這一步中沒有看到Allow Launching 則需要選擇Rename進行重命名,將名字後面的.desktop刪掉,然後再設置可執行,成功後的效果如下:
在這裏插入圖片描述
到此Visual Studio Code就在CentOS 8.1中安裝成功。

其他安裝

其他必要的安裝可百度,OpenJDK編譯請參考:《Java工程師嚐鮮:編譯最新OpenJDK

正式調試

構建VS工程

在CentOS系統中打開終端切換root用戶,並進入已成功編譯過的OpenJDK根目錄(筆者是放置在openjdk14中)

cd /opt/openjdk/
make vscode-project

在這裏插入圖片描述

導入VS工程

打開Visaul Studio Code點擊 File --> Open Workspace…
在這裏插入圖片描述
進入上一步執行make vscode-project 成功後輸出的目錄,點擊OPEN即可將項目導入:
在這裏插入圖片描述
在這裏插入圖片描述
導入後會出現一個警告,警告的含義是當前Visual Studio Code打開的workspace文件太多已超出限制,需要做一些配置,我們點擊藍色按鈕(Instuctions)可以跳轉到官網找到解決方案:
在這裏插入圖片描述
解決方案是在終端查看當前文件限制數並修改其設置:

cat /proc/sys/fs/inotify/max_user_watches

在這裏插入圖片描述
默認文件句柄限制爲8192,通過以下命令修改:

vim /etc/sysctl.conf

在文件最後增加以下內容:
fs.inotify.max_user_watches=524288

然後:wq保存退出,再執行以下命令使配置生效:

sudo sysctl -p

安裝C/C++編譯插件
在這裏插入圖片描述
安裝Code Runner插件
在這裏插入圖片描述
重新啓動Visual Studio Code,我們看到完整的jdk源碼及編譯文件結構:
在這裏插入圖片描述

調試OpenJDK

點擊VScode的debug按鈕,我們可以看到如下內容:
在這裏插入圖片描述
在“2.點擊下拉框”我們看到兩個可以執行的選項
gtestLauncher
java

這是jdk源碼調試的兩個入口,我們先使用默認的gtestLauncher,然後點擊右邊的齒輪,VScode會打開一個luanch.json的配置文件,其內容是:

{
    "version": "0.2.0",     
    "configurations": [
        {
            "name": "gtestLauncher",  // 配置名稱,將會在啓動配置的下拉菜單中顯示
            "type": "cppdbg",  // 配置類型,cppdbg對應cpptools提供的調試功能;可以認爲此處只能是cppdbg
            "request": "launch",  // 請求配置類型,可以爲launch(啓動)或attach(附加)
            "program": "/opt/openjdk14/build/linux-x86_64-server-release/hotspot/variant-server/libjvm/gtest/gtestLauncher",  // 將要進行調試的程序的路徑
            "args": ["-jdk:/opt/openjdk14/build/linux-x86_64-server-release/jdk"],  // 程序調試時傳遞給程序的命令行參數
            "stopAtEntry": false,  // 設爲true時程序將暫停在程序入口處,相當於在main上打斷點
            "cwd": "/opt/openjdk14", // 調試程序時的工作目錄,此爲工作區文件夾;改成${fileDirname}可變爲文件所在目錄
            "environment": [], // 環境變量
            "externalConsole": false, // 爲true時使用單獨的cmd窗口,與其它IDE一致;18年10月後設爲false可調用VSC內置終端TERMINAL
            "preLaunchTask": "Make 'exploded-image'", 
            "osx": {
                "MIMode": "lldb",
                "internalConsoleOptions": "openOnSessionStart",
                "args": ["--gtest_color=no", "-jdk:/opt/openjdk14/build/linux-x86_64-server-release/jdk"]
            },
            "linux": {
                "MIMode": "gdb",  // 指定連接的調試器,可以爲gdb或lldb,linux下默認使用gdb
                "setupCommands": [
                    {
                        "text": "handle SIGSEGV noprint nostop",
                        "description": "Disable stopping on signals handled by the JVM"
                    }
                ]
            }
        },
        {
            "name": "java",
            "type": "cppdbg",
            "request": "launch",
            "program": "/opt/openjdk14/build/linux-x86_64-server-release/jdk/bin/java",
            "stopAtEntry": false,
            "cwd": "/opt/openjdk14",
            "environment": [],
            "externalConsole": false,
            "preLaunchTask": "Make 'exploded-image'",
            "osx": {
                "MIMode": "lldb",
                "internalConsoleOptions": "openOnSessionStart",
            },
            "linux": {
                "MIMode": "gdb",
                "setupCommands": [
                    {
                        "text": "handle SIGSEGV noprint nostop",
                        "description": "Disable stopping on signals handled by the JVM"
                    }
                ]
            }
        }
    ]
}

我們根據配置文件找到調試入口:/opt/openjdk14/build/linux-x86_64-server-release/hotspot/variant-server/libjvm/gtest/gtestLauncher
但這是個so的二進制文件,對應的cpp文件在源碼目錄下,我們將luanch.json中的"stopAtEntry"改爲true,讓他啓動時在main函數處斷點,這樣我們就可以很快找到對應的源文件了,修改後點擊RUN旁邊的箭頭啓動debug:
在這裏插入圖片描述
很快程序就會進入main函數的斷點:
在這裏插入圖片描述
VScode會自動將調試入口的源程序gtestLuancher.cpp打開,並在main函數中斷點。這樣我們就可以愉快的進行調試了,常用的快捷鍵是:

F5: 運行至下一個斷點
F10: 一行一行的執行,如果某一行是一個函數的調用,不進入該函數
F11: 一行一行的執行,如果某一行是一個函數的調用,會進入該函數
shift + F11: 跳出方法
Ctrl + F10: 執行到光標處

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章