CentOS上编译OpenJDK8源码及在Eclipse上调试HotSpot虚拟机源码

栏目: Java · 发布时间: 7年前

内容简介: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

命令结果如下:

CentOS上编译OpenJDK8源码及在Eclipse上调试HotSpot虚拟机源码

CentOS上编译OpenJDK8源码及在Eclipse上调试HotSpot虚拟机源码

生成的文件都在openjdk/build目录,测试:

./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version

CentOS上编译OpenJDK8源码及在Eclipse上调试HotSpot虚拟机源码

2、gdb断点进入源码调试hotspot

2-1、编译class

[root@localhost test]# vim Test.java

[root@localhost test]# cat Test.java

public class Test{

public static void main(String[] args){

System.out.println("hello world !");

}

}

[root@localhost test]# /root/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/javac Test.java

[root@localhost test]# /root/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java Test

hello world !

CentOS上编译OpenJDK8源码及在Eclipse上调试HotSpot虚拟机源码

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

(gdb) break init.cpp:95   

(gdb) run

(gdb) l

(gdb) quit

CentOS上编译OpenJDK8源码及在Eclipse上调试HotSpot虚拟机源码

可以对比init.cpp源码文件:

CentOS上编译OpenJDK8源码及在Eclipse上调试HotSpot虚拟机源码

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

更多详情见请继续阅读下一页的精彩内容 http://www.linuxidc.com/Linux/2017-06/144713p2.htm


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网站分析实战

网站分析实战

王彦平 吴盛峰 / 电子工业出版社 / 2013-1 / 59.00元

《网站分析实战:如何以数据驱动决策,提升网站价值》由王彦平、吴盛峰著。目前,越来越多的网站开始重视数据,并期望从中发现新的机会,不管你是做网络营销、互联网产品设计、电子商务运营、个人站点运营维护,我们都希望从数据中寻找有价值的结论,并且指导公司管理层的决策,最终创造更大的网站价值。《网站分析实战:如何以数据驱动决策,提升网站价值》以通俗易懂的方式来讲解网站分析所需掌握的知识,剖析日常工作中遇到的问......一起来看看 《网站分析实战》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具