版權聲明:本文為博主原創文章,如需轉載請注明出處。
准備#
編譯好的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

