了解JVM(二)Linux下使用netbeans调试hotspot虚拟机

PS:上一节了解JVM(一)Linux编译openJDK7

下载并安装netbeans

笔者用的是netbeans-8.2-cpp-linux-x64.sh

云盘链接:https://pan.baidu.com/s/1y8nSfUllAQunP7T6KSZeNA
提取码:381l
官方下载地址:https://netbeans.apache.org/download/index.html

傻瓜式安装~这里就不做介绍了

netbeans调试hotspot虚拟机

PS:这里要使用root用户进行启动netbeans
打开netbeans,选中图中蓝色底色的项,意思是创建基于现有源代码的c/c++项目,然后点击next下一步。
了解JVM(二)Linux下使用netbeans调试hotspot虚拟机_第1张图片
第一个红色框是选择你的hotspot源代码的目录位置。(这里选择的是下载的openjdk7的hotspot位置,不是上一节中你自己编译后的jdk的位置),
第二个红色框意思是“定制”模式。然后下一步。
了解JVM(二)Linux下使用netbeans调试hotspot虚拟机_第2张图片
预构建操作,不用管,直接下一步。
了解JVM(二)Linux下使用netbeans调试hotspot虚拟机_第3张图片

构建操作,红色框是需要填的东西。
工作目录:选择你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

了解JVM(二)Linux下使用netbeans调试hotspot虚拟机_第4张图片
中间的直接全部点next下一步,最后这里点击finish即可。

了解JVM(二)Linux下使用netbeans调试hotspot虚拟机_第5张图片
紧接着,就是等待构建的过程了。。。(这里估计10分钟,笔者这里也没理它,去吃饭了)
了解JVM(二)Linux下使用netbeans调试hotspot虚拟机_第6张图片
终于构建成功了,出现以下标志“BUILD SUCCESSFUL”,说明build构建成功!(emmm,用时8分钟~~)
了解JVM(二)Linux下使用netbeans调试hotspot虚拟机_第7张图片
可以看到hotspot项目中的目录结构是这样的
了解JVM(二)Linux下使用netbeans调试hotspot虚拟机_第8张图片
附:目录结构图(笔者从《深入理解JVM》周志明著扣下来的。。。)
这里有别人文章的,比较清晰:Hotspot目录结构图
了解JVM(二)Linux下使用netbeans调试hotspot虚拟机_第9张图片
接下来还要配置我们的运行环境,右键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

了解JVM(二)Linux下使用netbeans调试hotspot虚拟机_第10张图片
了解JVM(二)Linux下使用netbeans调试hotspot虚拟机_第11张图片

最后配置完成,可以在java.c文件的main函数中打个断点进行测试,然后进行debug调试模式,又要等数分钟了,这里你会发现某一刻断点在main函数中停留了,那就说明是成功了,最后运行完毕后,可以看到控制台的结果如下:
了解JVM(二)Linux下使用netbeans调试hotspot虚拟机_第12张图片

遇到的问题

1.使用netbeans创建项目时,最后的finish点击后,如果出现了Cannot create folder nbproject in folder…

解决:需要自己手动创建nbproject文件夹

2.使用netbeans创建项目时,最后的finish点击后,出现Permission denied没有权限

解决:切换root用户,用root用户启动netbeans

3.使用netbeans创建项目时,最后的finish界面出现,project folder already exists and is not empty. “nbproject” exists

解决:查看是否自己创建了nbproject文件夹, 删除nbproject文件夹并重新启动IDE

关于截图问题

前面的截图可能分辨率问题,笔者是从命令行界面重新安装的图形化界面,分辨率没设置好,后期设置后,可能会比之前看起来好一丢丢。
ubuntu设置分辨率

本文参考了hotspot虚拟机的调试

记录个人学习,分享经验,不喜勿喷

你可能感兴趣的:(JVM)