LINUX教学:CentOS上编译OpenJDK8源码及在Eclipse上调试HotSpot虚
《LINUX教学:CentOS上编译OpenJDK8源码及在Eclipse上调试HotSpot虚拟机源码》要点: 想深入了解Java的运行机制,我们有需要了解HotSpot虚拟机;下面我们先在CentOS6.4 64位系统上编译OpenJDK8源码,然后用gdb断点调试hotspot源码,最后再配置在eclipse上调试hotspot源码; 1、编译OpenJDK8源码 1-1、获取OpenJDK8源码 最新OpenJDK8源码下载页面: http://download.java.net/openjdk/jdk8 这里下载openjdk-8-src-b132-03_mar_2014.zip: http://www.java.net/download/openjdk/jdk8/promoted/b132/openjdk-8-src-b132-03_mar_2014.zip 在CentOS上解压: unzip openjdk-8-src-b132-03_mar_2014.zip 1-2、配置编译情况 解压后看到,构建编译阐明:README-builds.html 1)、make版本 OpenJDK8可以使用"config && make"编译构建,不再使用Ant和ALT_ *情况变量来配置构建; 不过必要GNU make 3.81或更新的版本(查看:make -version); 2)、安装领导JDK: 构建JDK8必要使用JDK7 Update 7或更高版本的版本作为引导(Bootstrap)JDK,但不应使用JDK8作为引导JDK; JDK7下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 这里下载jdk-7u80-Linux-x64.rpm; 下载放到主机上后,直接: yum localinstall jdk-7u80-linux-x64.rpm 安装的目次:/usr/java/jdk1.7.0_80/ 3)、安装编译对象类库: yum groupinstall "Development Tools" yum install libXtst-devel libXt-devel libXrender-devel yum install cups-devel yum install freetype-devel yum install alsa-lib-devel 还可以再安装ccache,能加快编译速度,特别是必要多次编译时; 这些在configure时,都有提醒,缺什么就安装什么; 1-3、构建编译 --with-boot-jdk:指定引导JDK地点目录,以防其他安装的JDK影响(本机上以前安装了JDK8,并配置了JAVA_HOME指向JDK8); --with-target-bits:指定编译64位体系的JDK; 为可以进行源码调试,再指定下面三个参数: --with-debug-level=slowdebug:指定可以天生最多的调试信息; --enable-debug-symbols ZIP_DEBUGINFO_FILES=0:生成调试的符号信息,而且不压缩; 敕令如下: cd openjdk bash ./configure --with-target-bits=64 --with-boot-jdk=/usr/java/jdk1.7.0_80/ --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0 make all ZIP_DEBUGINFO_FILES=0 命令成果如下: 生成的文件都在openjdk/build目次,测试: ./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version 2、gdb断点进入源码调试hotspot 2-1、编译class [root@localhost test]# vim Test.java 2-2、进入gdb测试 用gdb测试上面编译的class文件; 然后在 init.cpp的第95行打个断点, 接着运行,可以看到停在了/root/openjdk/hotspot/src/share/vm/runtime/init.cpp:95; 执行进程如下: ? [root@localhost test]# gdb --args /root/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java Test 可以对照init.cpp源码文件: 2-3、注意,如果不克不及进入断点 呈现以下类似信息: Missing separate debuginfo for /root/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/lib/amd64/server/libjvm.so 因为前面configure没指定"--enable-debug-symbols ZIP_DEBUGINFO_FILES=0"没生成调试的符号信息,或生成后被紧缩为"libjvm.diz"了,所有无法找到; 可以去到"libjvm.so"地点目录,然后解压:unzip libjvm.diz 解压出来:libjvm.debuginfo 更多详情见请继续阅读下一页的出色内容: _baidu_page_break_tag_3、在eclipse上调试hotspot源码 3-1、下载eclipse,安装C/C++插件 到官网选择一个适宜的eclipse下载:https://www.eclipse.org/downloads/eclipse-packages/?osType=linux&release=undefined 这里下载的是eclipse-java-neon-1a-linux-gtk-x86_64.tar.gz:https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/neon/1a/eclipse-java-neon-1a-linux-gtk-x86_64.tar.gz&mirror_id=1207 这个还没有开发C++的功能,所有解压打开eclipse后,还必要到"help -> Eclipse Maketplace",搜索"c++"找到Eclipse C++ IDE..安装; 安装后,就可以转到C++开发视图界面了,如下: 3-2、导入hotspot工程 File-> New -> Existing Code as Makefile Project 在界面中: Project Name:hotspot(这个可以本身选择) Existing Code Location:/root/openjdk/hotspot Toolchain:选Linux GCC,然后按Finish. 3-3、设置装备摆设源码调试 右键工程 -> Debug As -> Debug Configurations -> 右键左边的C/C++ Application -> New -> 进入Main选项卡; 在选项卡中: Project:hotspot(选择导入的hotspot工程) C/C++ Application:/root/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java(编译生成的openjdk虚拟机进口) Disable auto build:因为不再在eclipse里面编译hotspot源码,以是这里选上它; 然后切换到Arguments选项卡,输入Java的参数,我们这里运行上面的Main类,于是这里填上 "Test"也便是我们要执行的Java程序 然后切换到Environment选项卡,添加变量: JAVA_HOME=/root/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/(编译生成JDK地点目录) CLASSPATH=.:/root/test (Test类文件地点目录) 点击下面的Apply保留; 3-4、断点Debug 在hotspot源码工程中找到init.cpp,在95行打个断点; 运行上面设置装备摆设的Debug,可以看到顺利调到了断点; 如图: 注意,如果不克不及进入断点看前面"2-3"; 4、设置装备摆设hotspot调试运行eclipse的java工程 4-1、新建java工程(测试) 新建java工程,在工程新建包,在包中新建Test.java文件,测试法式如下: 01.package com.hotspot.test;? 02.public class Test {? 03.? ? public static void main(String[] args){? 04.? ? ? ? System.out.println("hotspot test!");? 05.? ? }? 06.} 而运行正常,天生了Test.class文件,如下图: 4-2、改动hotspot工程调试参数 在前面的5-3配置源码调试的配置上作如下改动; Arguments选项卡: com.hotspot.test/Test(注意在前面加上包名,然后是运行类) Environment选项卡,修转变量: CLASSPATH=.:/root/workspace/TestHotspot/bin (java工程生成的bin目录,不包含包名目录) 保留后,点击调试运行hotspot工程,可以看到正常运行了上面的java工程文件,如下: 注意,如果有包名情况下,配置纰谬,调试运行会报"错误: 找不到或无法加载主类 **";到这里,我们可以对hotspot虚拟机源码进行调试了…… 本文永远更新链接地址: 更多LINUX教程,尽在编程之家PHP学院专栏。欢迎交流《LINUX教学:CentOS上编译OpenJDK8源码及在Eclipse上调试HotSpot虚拟机源码》! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |