以前的文章在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源碼剖析系列文章!