你们也能够看个人博客: openjdk8之编译和debug,这里格式更好。
系统环境为ubuntu 16.04,uname -a:php
Linux ddy-Aspire-V5-573G 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
在本文中,要编译的openjdk版本为:openjdk-8u40-src-b25-10_feb_2015。
尝试了编译openjdk-8-src-b132-03_mar_2014,可是失败。网上说,由于ubuntu16.04较新,可是该版本的JDK较老,因此失败。html
下面说明编译和debug过程。java
OpenJDK8能够使用"config && make"编译构建,再也不使用Ant和ALT_ *环境变量来配置构建。
不过须要GNU make 3.81或更新的版本linux
我使用的引导JDK是jdk-7u76-linux-x64。git
java version "1.6.0_45" Java(TM) SE Runtime Environment (build 1.6.0_45-b06) Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
安装gcc、g++、make等
sudo apt-get install build-essential
安装XRender
sudo apt-get install libxrender-dev
sudo apt-get install xorg-dev
安装alsa
sudo apt-get install libasound2-dev
Cups
sudo apt-get install libcups2-dev
安装零碎的工具包
sudo apt-get install gawk zip libxtst-dev libxi-dev libxt-dev
github
--with-boot-jdk:指定引导JDK所在目录,以防其余安装的JDK影响(本机上之前安装了JDK8,并配置了JAVA_HOME指向JDK8);
--with-target-bits:指定编译64位系统的JDK;redis
为能够进行源码调试,再指定下面三个参数:
--with-debug-level=slowdebug:指定能够生成最多的调试信息;
--enable-debug-symbols ZIP_DEBUGINFO_FILES=0:生成调试的符号信息,而且不压缩;
在openjdk目录下新建build.sh,内容以下:ubuntu
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
执行./build.sh
编译完成是这样的:
bash
ddy@ddy-Aspire-V5-573G ~/openjdk-compile/openjdk-8u40-src-b25-10_feb_2015/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin $ ./java -version openjdk version "1.8.0-internal-debug" OpenJDK Runtime Environment (build 1.8.0-internal-debug-ddy_2017_06_11_23_26-b00) OpenJDK 64-Bit Server VM (build 25.40-b25-debug, mixed mode) ddy@ddy-Aspire-V5-573G ~/openjdk-compile/openjdk-8u40-src-b25-10_feb_2015/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin $ export CLASSPATH=.:/home/ ddy/java_src ddy@ddy-Aspire-V5-573G ~/openjdk-compile/openjdk-8u40-src-b25-10_feb_2015/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin $ gdb --args java FileChann elTest GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04) 7.11.1 Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-linux-gnu". Type "show configuration" for configuration details. For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from java...done. (gdb) break init.cpp:95 No source file named init.cpp. Make breakpoint pending on future shared library load? (y or [n]) y Breakpoint 1 (init.cpp:95) pending. (gdb) run Starting program: /home/ddy/openjdk-compile/openjdk-8u40-src-b25-10_feb_2015/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java FileChannelTest [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". [New Thread 0x7ffff7fc8700 (LWP 9311)] [Switching to Thread 0x7ffff7fc8700 (LWP 9311)] Thread 2 "java" hit Breakpoint 1, init_globals () at /home/ddy/openjdk-compile/openjdk-8u40-src-b25-10_feb_2015/openjdk/hotspot/src/share/vm/runtime/init.cpp:95 95 jint init_globals() { (gdb) l 90 chunkpool_init(); 91 perfMemory_init(); 92 } 93 94 95 jint init_globals() { 96 HandleMark hm; 97 management_init(); 98 bytecodes_init(); 99 classLoader_init(); (gdb) quit A debugging session is active. Inferior 1 [process 9307] will be killed. Quit anyway? (y or n) y ddy@ddy-Aspire-V5-573G ~/openjdk-compile/openjdk-8u40-src-b25-10_feb_2015/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin $
openjdk之编译常常出现的问题
openjdk7的编译和debug
编译主要参考:ubuntu14.04 编译openjdk7
debug主要参考:CentOS上编译OpenJDK8源码 以及 在eclipse上调试HotSpot虚拟机源码session