調試HotSpot源代碼

以前的文章在Ubuntu 16.04上編譯OpenJDK8的源代碼 已經介紹過在Ubuntu上編譯OpenJDK8的源代碼,這一篇將介紹在Ubuntu上調試OpenJDK8源代碼的2種方式。 html

在Linux上經常使用GDB調試C/C++源代碼。使用GDB運行如上實例生成的Class文件,具體命令以下:java

gdb --args ./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java Test

進入GDB後,輸入以下命令: linux

break java.c:JavaMain
continue

第一條命令表示在源文件java.c的JavaMain函數入口處設置斷點;第二條命令表示讓中斷的程序繼續運行,直到運行完程序後退出GDB,並在終端打印」Hello World!「信息。
下面介紹一些經常使用的GDB命令,以下表所示。 c++

命令eclipse

描述函數

backtrace(bt)網站

查看各級函數調用及參數ui

finishspa

連續運行到當前函數返回爲止,而後停下來等待命令操作系統

frame(f) n

從當前棧幀移到到n棧幀

info(i) locals

查看當前棧幀局部變量的值

list(l)

列出源代碼,接着上次的位置往下列,每次列10行ll

list(l)  行號

列出從指定行開始的源代碼

list(l) 函數名

列出指定的函數的源代碼

next(n)

執行下一行語句

print(p)

打印表達式的值,經過表達式能夠修改變量的值或者調用函數

quit(q)

退出gdb調試環境

step(s)

執行下一行語句,若是有函數調用則進入到函數中

start

開始執行程序,停在main函數第一行語句前面等待命令

break(b) 行號

在指定行設置斷點

break 函數名

在指定函數的開頭設置斷點

break ... if ...

設置條件斷點

continue(c)

從當前位置開始連續運行程序

delete breakpoints 斷點號

刪除斷點

display 變量名

跟蹤查看指定變量名的變量,每次停下來都顯示它的值

disable breakpoints 斷點號

禁用斷點

enable 斷點號

啓用斷點

info(i) breakpoints

查看當前設置了哪些斷點

run(r)

從頭開始連續運行程序

undisplay 跟蹤顯示號

取消跟蹤顯示

watch

設置觀察點

info(i) watchpoints

查看當前設置了哪些觀察點

x

從某個位置開始打印存儲單元的內容,所有當成字節來看,

而不區分哪一個字節屬於哪一個變量

 

1.下載安裝Eclipse並安裝C/C++插件

在 https://www.eclipse.org/downloads 網站上下載支持Ubuntu 64位版本操做系統的Eclipse,筆者下載的壓縮包名稱爲eclipse-java-neon-3-linux-gtk-x86_64.tar.gz,經過以下命令解壓後獲得eclipse目錄。命令以下:​

tar -zxvf eclipse-java-neon-3-linux-gtk-x86_64.tar.gz

切換到eclipse目錄後,運行以下命令啓動Eclipse。命令以下: 

./eclipse &

啓動Eclipse後,單擊help菜單項,選擇Eclipse Marketplace選項後,彈出Eclipse Marketplace對話框,搜索"c++"找到Eclipse C++ IDE..安裝。安裝完成後就能夠建立及導入C/C++項目到Eclipse中了。

2.導入HotSpot源代碼

單擊help菜單項,選擇new->Other...後,在彈出的New對話框中選擇Makefile Project with Existing Code,而後單擊「Next」,添寫相關的信息,以下圖所示。​

 

設置完成後單擊「Finish」便可。

3.配置及調試源代碼

在HotSpot項目上右擊,選擇Debug As -> Debug Configurations...,在彈出的Debug Configurations對話框中,選擇C/C++ Application後,右擊,在彈出的菜單中選擇New Configuration後,在右側的Main選項卡中配置相關的信息,以下圖所示。

 切換到Arguments選項卡, 在Program arguments文本框中輸入虛擬機運行時的參數,這裏運行以前的實例,具體參數以下:

com.test/Test

切換到Environment選項卡, 添加變量:​  

JAVA_HOME=/home/mazhi/workspace/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/
CLASSPATH=.:/home/mazhi/workspace/project/bin

CLASSPATH指定Test.class文件所在的目錄。設置完相關信息後,單擊Apply進行保存。  

 

 

關注我的博客www.classloading.com或公衆號,有HotSpot源碼剖析系列文章! 

相關文章
相關標籤/搜索