版權聲明:本文為博主原創文章,如需轉載請註明出處。 準備 編譯好的Hotspot虛擬機 "Java虛擬機(HOTSPOT)源代碼編譯步驟" : GDB基本操作: "Linux編程基礎——GDB(入門)" "Linux編程基礎——GDB(設置斷點)" 系統: Ubuntu 14.04 調試步驟 可調試 ...
版權聲明:本文為博主原創文章,如需轉載請註明出處。
準備
編譯好的Hotspot虛擬機
Java虛擬機(HOTSPOT)源代碼編譯步驟:
GDB基本操作:
Linux編程基礎——GDB(入門)
Linux編程基礎——GDB(設置斷點)
系統:
Ubuntu 14.04
調試步驟
可調試的虛擬機位置:
openjdk7:源代碼目錄
build-debug:編譯後的二進位文件位置
build-debug/hotspot/outputdir/linux_i486_compiler1/jvmg:虛擬機位置
如果按照Java虛擬機(HOTSPOT)源代碼編譯步驟進行代碼編譯,下麵的操作之前,請切換到root用戶。
解壓縮調試符號:
務必要把虛擬機目錄下的libjvm.diz里的內容解壓到虛擬機所在目錄,做一次就可以,不需要每次調試都解壓
/home/zxf/openjdk7/build-debug/hotspot/outputdir/linux_i486_compiler1/jvmg的libjvm.diz解壓到當前目錄中,否則只能進行表層調試,像Threads::create_vm無法break into進去
調試前導入變數:
請將下麵shell中/home/zxf/換成你自己的openjdk7源代碼目錄
export LD_LIBRARY_PATH=/home/zxf/openjdk7/build-debug/hotspot/outputdir/linux_i486_compiler1/jvmg/
export JAVA_HOME=/home/zxf/openjdk7/build-debug/j2sdk-image/
export CLASSPATH=.:/home/zxf/openjdk7/build-debug/j2sdk-image/lib:/home/zxf/openjdk7/build-debug/j2sdk-image/jre/lib
開始調試:
jvmg目錄下的gamma文件就是虛擬機程式
設置斷點:
註意下麵這個斷點設置一定要讓gdb開始調試了即r命令後才能設置上。
b Threads::create_vm
進入核心函數cream_vm