内容简介: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
[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 !
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
可以对比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
更多详情见请继续阅读下一页的精彩内容 : http://www.linuxidc.com/Linux/2017-06/144713p2.htm
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 在Docker上编译OpenJDK 8
- 云上自动化 vs 云上编排
- 在 Bluemix 上编写 Clojure Web 应用程序
- 在 CentOS 7.8 上编译 PHP 7.4.x
- FreeBSD上编写x86 Shellcode初学者指南
- OpenmediaVault-4.1.3上编译Linux Kernel 4.14.118
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Google's PageRank and Beyond
Amy N. Langville、Carl D. Meyer / Princeton University Press / 2006-7-23 / USD 57.50
Why doesn't your home page appear on the first page of search results, even when you query your own name? How do other web pages always appear at the top? What creates these powerful rankings? And how......一起来看看 《Google's PageRank and Beyond》 这本书的介绍吧!
CSS 压缩/解压工具
在线压缩/解压 CSS 代码
URL 编码/解码
URL 编码/解码