PS:上一节了解JVM(一)Linux编译openJDK7
笔者用的是netbeans-8.2-cpp-linux-x64.sh
云盘链接:https://pan.baidu.com/s/1y8nSfUllAQunP7T6KSZeNA
提取码:381l
官方下载地址:https://netbeans.apache.org/download/index.html
傻瓜式安装~这里就不做介绍了
PS:这里要使用root用户进行启动netbeans
打开netbeans,选中图中蓝色底色的项,意思是创建基于现有源代码的c/c++项目,然后点击next下一步。
第一个红色框是选择你的hotspot源代码的目录位置。(这里选择的是下载的openjdk7的hotspot位置,不是上一节中你自己编译后的jdk的位置),
第二个红色框意思是“定制”模式。然后下一步。
预构建操作,不用管,直接下一步。
构建操作,红色框是需要填的东西。
工作目录:选择你hotspot源代码目录下的make目录即可(上面第二步有hotspot源代码目录)
例如:/home/breeze/workspace/openjdk/hotspot/make
clean command:清理命令
${MAKE} -f Makefile clean
build command: 构建命令
(PS:其中ALT_BOOTDIR是你上一节编译openjdk7中作为Bootstrap JDK的路径,笔者这里用的是oracle的jdk6)
${MAKE}-f Makefile clean jvmg ALT_BOOTDIR=/usr/java/jdk6 ARCH_DATA_MODEL=64 LANG=C
中间的直接全部点next下一步,最后这里点击finish即可。
紧接着,就是等待构建的过程了。。。(这里估计10分钟,笔者这里也没理它,去吃饭了)
终于构建成功了,出现以下标志“BUILD SUCCESSFUL”,说明build构建成功!(emmm,用时8分钟~~)
可以看到hotspot项目中的目录结构是这样的
附:目录结构图(笔者从《深入理解JVM》周志明著扣下来的。。。)
这里有别人文章的,比较清晰:Hotspot目录结构图
接下来还要配置我们的运行环境,右键hotspot项目,点击properties(属性),然后Categories(类别)选择Run,配置如下:
Run Command:运行命令
(/home/breeze/workspace/openjdk/hotspot改成你自己的hotspot源代码目录)
运行命令的意思是,用什么去运行什么,第一个什么就是gamma,这个gamma就是虚拟机程序,第二个什么就是指的你要在虚拟机上运行的class文件。当然class文件的运行实际上是为了调试虚拟机,这点要清楚,你class都没有运行,怎么调试你的虚拟机呢。
/home/breeze/workspace/openjdk/hotspot/build/linux/linux_amd64_compiler2/jvmg/gamma -XX:StopInterpreterAt=1 -version /home/breeze/workspace/openjdk/hotspot/build/linux/linux_amd64_compiler2/jvmg/Queens
注意中间的空格,gamma是hotspot源代码编译后生成的,要生成后才有,但是你要找到你gamma的路径,后面的两个是gamma的参数,最后的一个长路径是你要运行的class文件地址。你大可写成绝对路径,就不用在后续的classpath地址上加这个长路径了。
Run Directory:运行目录
(同理,按照自己实际目录修改)
/home/breeze/workspace/openjdk/hotspot/build/linux/linux_amd64_compiler2/jvmg
Environment:环境
java_home配置你前一节作为Bootstrap JDK的目录
JAVA_HOME:/usr/java/jdk6
CLASSPATH:.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
LD_LIBRARY_PATH: /home/breeze/workspace/openjdk/hotspot/build/linux/linux_amd64_compiler2/jvmg
最后配置完成,可以在java.c文件的main函数中打个断点进行测试,然后进行debug调试模式,又要等数分钟了,这里你会发现某一刻断点在main函数中停留了,那就说明是成功了,最后运行完毕后,可以看到控制台的结果如下:
解决:需要自己手动创建nbproject文件夹
解决:切换root用户,用root用户启动netbeans
解决:查看是否自己创建了nbproject文件夹, 删除nbproject文件夹并重新启动IDE
前面的截图可能分辨率问题,笔者是从命令行界面重新安装的图形化界面,分辨率没设置好,后期设置后,可能会比之前看起来好一丢丢。
ubuntu设置分辨率
本文参考了hotspot虚拟机的调试
记录个人学习,分享经验,不喜勿喷