2

前言

源代码下载

如果使用 hg 下载源代码会很漫长而且经常掉线,可以使用 github 上的源代码镜像

# git clone https://github.com/dmlloyd/openjdk

构建

configure

在构建之前建议仔细阅读源代码目录下的 README-builds.html or README-builds.md 文件

# bash ./configure

configure 错误输出很 nice,如果缺少库,使用 apt install 即可,例如:

configure: error: Could not find alsa! You might be able to fix this by running   
'sudo apt-get install libasound2-dev'.
configure exiting with result code 1

配置完成后会有个 summary:

====================================================
A new configuration has been successfully created in
/home/xingpingz/studies/openjdk/build/linux-x86_64-normal-server-slowdebug
using configure arguments '--with-debug-level=slowdebug'.

Configuration summary:
* Debug level:    slowdebug
* HS debug level: debug
* JDK variant:    normal
* JVM variants:   server
* OpenJDK target: OS: linux, CPU architecture: x86, address length: 64
* Version string: 9-internal+0-adhoc.xingpingz.openjdk (9-internal)

Tools summary:
* Boot JDK:       java version "1.8.0_91" Java(TM) SE Runtime Environment (build 1.8.0_91-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)  (at /opt/jdk1.8.0)
* Toolchain:      gcc (GNU Compiler Collection)
* C Compiler:     Version 5.4.0 (at /usr/bin/gcc)
* C++ Compiler:   Version 5.4.0 (at /usr/bin/g++)

Build performance summary:
* Cores to use:   4
* Memory limit:   11963 MB

make

# make

构建完成后在源代码 build 目录下会生成 linux-x86_64-normal-server-slowdebug,里面包含生成的 jdk,hotspot .etc

$ ll
总用量 120K
-rw-rw-r--  1 xingpingz xingpingz 2.7K 2月  14 13:56 bootcycle-spec.gmk
-rw-rw-r--  1 xingpingz xingpingz 7.0K 2月  14 13:56 buildjdk-spec.gmk
-rw-rw-r--  1 xingpingz xingpingz  17K 2月  14 14:02 build.log
drwxrwxr-x 17 xingpingz xingpingz 4.0K 2月  14 14:02 buildtools
-rwxrwxr-x  1 xingpingz xingpingz 3.6K 2月  14 13:56 compare.sh
-rw-rw-r--  1 xingpingz xingpingz  13K 2月  14 13:56 configure.log
drwxrwxr-x  2 xingpingz xingpingz 4.0K 2月  14 13:56 configure-support
drwxrwxr-x  4 xingpingz xingpingz 4.0K 2月  14 13:57 hotspot
drwxrwxr-x  2 xingpingz xingpingz 4.0K 2月  14 13:59 images
drwxrwxr-x  7 xingpingz xingpingz 4.0K 2月  14 14:02 jdk
-rw-rw-r--  1 xingpingz xingpingz 1.3K 2月  14 13:56 Makefile
drwxrwxr-x  6 xingpingz xingpingz 4.0K 2月  14 13:57 make-support
-rw-rw-r--  1 xingpingz xingpingz  33K 2月  14 13:56 spec.gmk
drwxrwxr-x 13 xingpingz xingpingz 4.0K 2月  14 14:01 support

IDE 调试

  • 下载和安装 CLion IDE

  • 以源代码方式新建一个工程,将 hotspot 相关的源代码导入 IDE

  • CLion 集成 CMake(Java 界的 Maven)进行构建,编辑 CMakeLists.txt 里面的 set 语句块,删除 x86 以外的源代码,减少 IDE 要索引的文件,加快速度

set(SOURCE_FILES
    cpu/x86/vm/...
    ...
  • 编辑 "运行&调试" configuration,将 executable(要运行的目标程序)修改成 在 make 阶段生成的 jdk/bin/java

  • 去掉 Before launch 里面的 build 动作,在 IDE 里面我们无法进行构建

  • 打开 jni.cpp 文件,找到 JNI_CreateJavaVM,设置断点,点击工具栏上那个"小臭虫"开始调试
    图片描述

总结


xingpingz
122 声望64 粉丝

博学,审问,慎思,明辨,力行


引用和评论

0 条评论