Ubuntu编译jdk7记录

Ubuntu编译JDK7记录
Ubuntu系统

Linux zhuguowei 3.16.0-62-generic #83~14.04.1-Ubuntu SMP Fri Feb 26 22:52:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

经常需要debug jdk 源码(rt.jar), 虽然可以设置断点, 但不能查看变量信息。如

c = defineClass1(name, b, off, len, protectionDomain, source);

图片描述

需要使用debug模式编译的jdk才可以看到变量信息。
于是动手编译JDK 参考了周志明的深入理解Java虚拟机 以下为步骤

  1. 下载openjdk(http://download.java.net/openjdk/jdk7/)

  2. 安装依赖包

    sudo apt-get install build-essential gawk m4 openjdk-6-jdk libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutils libmotif3 libmotif-dev ant
    
  3. 在解压后的openjdk目录下创建如下的脚本,内容为:

    export LANG=C
    #启动JDK 需修改为当前系统已安装的jdk目录 毕竟jdk中的大部分类还是java写的,编译还得依赖已有的环境 由于某些原因使用的是Oracle jdk1.6.0_45
    export ALT_BOOTDIR=/home/zhuguowei/develop/jdk1.6.0_45
    export ALLOW_DOWNLOADS=true
    #并行编译的线程数,设置为和CPU内核数量一致即可
    export HOTSPOT_BUILD_JOBS=4
    export ALT_PARALLEL_COMPILE_JOBS=4
    
    export SKIP_COMPARE_IMAGES=true
    export USE_PRECOMPILED_HEADER=true
    export SKIP_FASTDEBUG_BUILD=false
    export DEBUG_NAME=fastdebug
    BUILD_DEPLOY=false
    BUILD_INSTALL=false
    #编译后的JDK输出目录 ${openjdk_install_path}为当前openjdk目录
    export ALT_OUTPUTDIR=${openjdk_install_path}/build
    unset JAVA_HOME
    unset CLASSPATH
    make 2>&1 | tee $ALT_OUTPUTDIR/build.log
    
  4. 执行该脚本,若一切顺利的话,如下所示

    -- Build times ----------
    Target fastdebug_build
    Start 2016-03-06 17:55:23
    End   2016-03-06 18:10:50
    00:00:03 corba
    00:04:52 hotspot
    00:00:29 jaxp
    00:00:41 jaxws
    00:09:19 jdk
    00:00:02 langtools
    00:15:27 TOTAL
    -------------------------
    

    就会生成编译好的jdk

    cd openjdk/build/j2sdk-image
    ls
    ASSEMBLY_EXCEPTION  bin  demo  hotspot.log  include  jre  lib  LICENSE  man  release  sample  src.zip  THIRD_PARTY_README
     bin/java -version
    openjdk version "1.7.0-internal-fastdebug"
    OpenJDK Runtime Environment (build 1.7.0-internal-fastdebug-zhuguowei_2016_03_06_17_53-b00)
    OpenJDK 64-Bit Server VM (build 21.0-b17-fastdebug, mixed mode)
    

看一下使用自编译的jdk的效果

工程改成使用自编译的jdk

图片描述

进入断点时 watch 变量

图片描述

期间遇到了一些错误 但参考如下的文档都解决了
http://blog.csdn.net/lego2816/article/details/48807709
http://cduym.iteye.com/blog/1892416

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值