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


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

查看所有标签

猜你喜欢:

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

SCWCD Exam Study Kit Second Edition

SCWCD Exam Study Kit Second Edition

Hanumant Deshmukh、Jignesh Malavia、Matthew Scarpino / Manning Publications / 2005-05-20 / USD 49.95

Aimed at helping Java developers, Servlet/JSP developers, and J2EE developers pass the Sun Certified Web Component Developer Exam (SCWCD 310-081), this study guide covers all aspects of the Servlet an......一起来看看 《SCWCD Exam Study Kit Second Edition》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具