寫了那么多年 Java 代碼,終于 debug 到 JVM 了
繼上篇文章 原創(chuàng) | 全網(wǎng)最新最簡(jiǎn)單的 OpenJDK13 代碼編譯 之后,我們有了自己編譯后的 jdk 和 hotspot,如下圖所示。接下來就來干一番事情。
搭建調(diào)試環(huán)境1.下載 CLion 軟件
Jetbrains 是一家非常牛逼的公司,咱 Java 里面用到的 IDEA 功能很強(qiáng)大,這公司也為 C/C++ 提供一個(gè) IDE,名叫 CLion,咱需要下載這個(gè) IDE 來調(diào)試 JVM 源碼。
2.導(dǎo)入源碼
安裝完 CLion 之后,咱就可以先導(dǎo)入代碼,下面簡(jiǎn)單記錄一下操作步驟。
選擇 New CMake Project from Sources。
打開我們下載 OpenJDK13 的目錄,我的目錄是 /opt/java/openjdk/jdk13。
接下來有彈框點(diǎn)擊 Next 就行了,等待導(dǎo)入源碼完成(需要幾分鐘,可以喝杯茶)。
3.啟動(dòng)配置
導(dǎo)完源碼后,我們需要配置啟動(dòng)程序,這里有些配置需要重新指定,主要有下面 2 點(diǎn)。
Executable 修改為咱們編譯后的 java 程序。
Build 需要?jiǎng)h除掉。
4.打下斷點(diǎn)
我們?cè)?thread.cpp 代碼的 Threads::create_vm 方法打下斷點(diǎn)。
5.開始 Debug
點(diǎn)擊 Debug 按鈕,開始調(diào)試我們的 JVM 代碼?梢钥吹轿覀兇虻臄帱c(diǎn)生效了,如下圖所示。
恭喜,我們成功調(diào)試 JVM 代碼。不過發(fā)現(xiàn)了下面這個(gè)異常信息,解決它。
6.發(fā)現(xiàn)這個(gè)異常
按 F9 讓程序繼續(xù)跑,我們發(fā)現(xiàn) Console 出現(xiàn)了下面紅框的一行字。
這是 GDB 的異常信息,我們可以通過在我們的用戶目錄下添加配置來解決這個(gè)問題。創(chuàng)建 ~/.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
再運(yùn)行就不會(huì)有這個(gè)異常信息了。
調(diào)試自己的代碼
上面已經(jīng)調(diào)通了我們編譯的 JVM 源碼,有同學(xué)可能想知道,那要調(diào)試自己寫的代碼得怎么操作呢?我們上面已經(jīng)看到 Debug 到 JVM 源碼了,我們自己的代碼則可以通過我們編譯后的 JDK 來編譯,然后在程序執(zhí)行參數(shù)那里指定。下面舉個(gè)例子。
1.編寫 Test 代碼
我們編寫一個(gè)簡(jiǎn)單的 Hello JVM 程序,代碼如下。
public class Test {
public static void main(String[] args) {
System.out.println("hello jvm");
}
}
2.javac 編譯
通過我們編譯后的 JDK 命令 javac Test.java 來編譯。
liebrother@liebrother:/opt/java/openjdk/jdk13/build/linux-x86_64-server-release/jdk/bin$ ./javac Test.java
3.配置啟動(dòng)參數(shù)
然后在 Clion 程序啟動(dòng)配置那里指定我們的類 Test。
結(jié)果就是我們的程序被運(yùn)行了。
以上就是我們今天要講的在 JVM 層面上調(diào)試我們自己寫的程序。
總結(jié)
總結(jié)一下搭建這套 JVM 環(huán)境。搭建過程中其實(shí)沒有很波折,官方文檔寫的很清晰(雖然都是英文的),這 2 篇文章也是盡最大的努力,把一些步驟簡(jiǎn)化,也截圖保留下來,一方面給自己回顧的機(jī)會(huì),一方面也是給有想要搭建這套環(huán)境的朋友們一個(gè)捷徑。這套環(huán)境接下來的定義是:給自己深入了解 JVM 的機(jī)會(huì),在遇到某些知識(shí)點(diǎn)不清晰,不明白原理的時(shí)候,就可以看一看源碼,揪出源頭的邏輯。
非常建議朋友們搭建這么一套環(huán)境,也不要怕 JVM 里面都是 C/C++ 代碼,可能剛開始看的時(shí)候會(huì)很費(fèi)勁,看多了就習(xí)慣了。

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
6月20日立即下載>> 【白皮書】精準(zhǔn)測(cè)量 安全高效——福祿克光伏行業(yè)解決方案
-
7月3日立即報(bào)名>> 【在線會(huì)議】英飛凌新一代智能照明方案賦能綠色建筑與工業(yè)互聯(lián)
-
7月22-29日立即報(bào)名>> 【線下論壇】第三屆安富利汽車生態(tài)圈峰會(huì)
-
7.30-8.1火熱報(bào)名中>> 全數(shù)會(huì)2025(第六屆)機(jī)器人及智能工廠展
-
7月31日免費(fèi)預(yù)約>> OFweek 2025具身機(jī)器人動(dòng)力電池技術(shù)應(yīng)用大會(huì)
-
免費(fèi)參會(huì)立即報(bào)名>> 7月30日- 8月1日 2025全數(shù)會(huì)工業(yè)芯片與傳感儀表展
推薦專題
- 1 AI 眼鏡讓百萬 APP「集體失業(yè)」?
- 2 大廠紛紛入局,百度、阿里、字節(jié)搶奪Agent話語權(quán)
- 3 深度報(bào)告|中國(guó)AI產(chǎn)業(yè)正在崛起成全球力量,市場(chǎng)潛力和關(guān)鍵挑戰(zhàn)有哪些?
- 4 上海跑出80億超級(jí)獨(dú)角獸:獲上市公司戰(zhàn)投,干人形機(jī)器人
- 5 國(guó)家數(shù)據(jù)局局長(zhǎng)劉烈宏調(diào)研格創(chuàng)東智
- 6 下一代入口之戰(zhàn):大廠為何紛紛押注智能體?
- 7 百億AI芯片訂單,瘋狂傾銷中東?
- 8 Robotaxi新消息密集釋放,量產(chǎn)元年誰在領(lǐng)跑?
- 9 格斗大賽出圈!人形機(jī)器人致命短板曝光:頭腦過于簡(jiǎn)單
- 10 “搶灘”家用機(jī)器人領(lǐng)域,聯(lián)通、海爾、美的等紛紛入局