接上一篇openjdk编译成功后,我搭建了相应的调试环境。
调试参考《深入理解java虚拟机-jvm高级特性与最佳实践》- 周志明
调试环境是Netbeans,版本要注意!!
我之前下载了8.0.2发现断点不能设置在java.c,后来改用了7.0版本就好了,费了不少时间,此处要留意~
gdb不是mac自带的,如果还没安装可用brew来安装,命令如下:
brew install https://raw.github.com/Homebrew/homebrew-dupes/master/gdb.rb
如果brew也没有的话,再敲如下命令安装:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装完gdb之后,如果发现gdb有提示代码证书之类签名错误,参考一下地址:
http://blog.csdn.net/powerlly/article/details/30323015
基于Makefile构建起来的netbeans工程,以下有几个地方需要设置的:
# 构建命令
${MAKE} -f Makefile clean jvmg ALT_BOOTDIR=/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home ARCH_DATA_MODEL=64 LANG=C COMPILER_WARNINGS_FATAL=false
#环境变量
JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home
CLASSPATH .:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/jre/lib/i18n.jar
LD_LIBRARY_PATH /Users/huic/Desktop/javachen/openjdk/hotspot/build/bsd/bsd_amd64_compiler2/jvmg:${JAVA_HOME}/jre/lib
ok之后开始调试,一下3张截图是我认为在调试中比较重要的运行线路,接下来将围绕某个.class文件从被load进vm到被执行的完整流程。
在这里,先记录下一个简要的代码目录关系:
hotspot/src/share/vm/下面重要的基本依赖,这是我的基本印象,没有论证,先记着~
classfile - code - / compiler - ci / c1
\ interpreter \ opto