• Ubuntu快速搭建单步调试openjdk环境


    版本
    操作系统 Ubuntu 20.04.2 LTS
    编译的jdk jdk8
    boot jdk jdk7
    看源码的工具 Clion

    安装引导 JDK。 所有 OpenJDK 构建都需要访问以前发布的 JDK,称为引导 JDK。 一般规则是引导 JDK 必须是 JDK 先前主要版本的实例。
    比如,构建JDK 8需要使用更新为7或更高版本的JDK 7版本。
    JDK 8开发人员不应使用JDK 8作为引导JDK,以确保使用JDK 7构建的系统部分不会引入JDK 8依赖项。

    摘自 http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html#setup

    一、准备源码环境一条龙

    1.1 下载要编译的源码

    git clone https://github.com/AdoptOpenJDK/openjdk-jdk8u
    

    如果 GitHub 下载太慢也可以选择 Gitee 镜像,我把 openjdk 源码放在 ~/CLionProjects 文件夹下:

    geekziyu@geekziyu-ubuntu-1:~$ cd ~/CLionProjects
    geekziyu@geekziyu-ubuntu-1:~/CLionProjects$ git clone -b jdk8-b120 https://gitee.com/mirrors/openjdk.git

    1.2 下载和解压jdk7

    我选择把 jdk 安装在 /opt/lib/jdk 文件夹,你可以选择直接安装在 ~ 即用户文件夹下。

    geekziyu@geekziyu-ubuntu-1:~$ cd /opt/lib/jdk
    geekziyu@geekziyu-ubuntu-1:/opt/lib/jdk$ sudo wget https://repo.huaweicloud.com/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz
    geekziyu@geekziyu-ubuntu-1:/opt/lib/jdk$ sudo tar -zxvf jdk-7u80-linux-x64.tar.gz
    geekziyu@geekziyu-ubuntu-1:/opt/lib/jdk$ sudo mv jdk1.7.0_80/ jdk7/

    1.3 配置环境变量

    geekziyu@geekziyu-ubuntu-1:~$ vim ~/.bashrc

    在文件末尾追加以下内容:

    export JAVA_HOME=/opt/lib/jdk/jdk7
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$JAVA_HOME/bin:$PATH
    

    保存并退出,然后执行:
    geekziyu@geekziyu-ubuntu-1:~$ source ~/.bashrc

    1.4 apt安装依赖

    geekziyu@geekziyu-ubuntu-1:~$ sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev libcups2-dev libfreetype6-dev libasound2-dev ccache

    编译的时候需要用到

    1.5 configure & make

    geekziyu@geekziyu-ubuntu-1:~$ cd ~/CLionProjects/openjdk

    geekziyu@geekziyu-ubuntu-1:~/CLionProjects/openjdk$ ls -al | grep configure
    -rw-r--r-- 1 csdn sudo 1235 8月 12 09:05 configure

    因为,默认情况下configure不是可执行文件,执行命令为文件所有者增加可执行权限
    geekziyu@geekziyu-ubuntu-1:~/CLionProjects/openjdk$ chmod u+x configure

    geekziyu@geekziyu-ubuntu-1:~/CLionProjects/openjdk$ ls -al | grep configure
    -rwxr--r-- 1 csdn sudo 1235 8月 12 09:05 configure

    geekziyu@geekziyu-ubuntu-1:~/CLionProjects/openjdk$ sudo ./configure --with-target-bits=64 --with-boot-jdk=/opt/lib/jdk/jdk7 --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0 WARNINGS_ARE_ERRORS=-Wno-all

    看到以下这个画面就证明配置成功了,就可以编译了。如果不是,就得一步步把问题解决了再重新配置

    我尝试用 gcc-9 版本编译,结果有很多我无法解决的编译问题,所以我还是把版本降到了 gcc-5 如需要了解《Ubuntu20.04 使用apt安装gcc-5》点击此处
    如果切换了 gcc,你也需要重新执行上面的 ./configure ... 操作,同时建议执行一个 make clean 再进行 make all

    geekziyu@geekziyu-ubuntu-1:~/CLionProjects/openjdk$ sudo make all DISABLE_HOTSPOT_OS_VERSION_CHECK=OK ZIP_DEBUGINFO_FILES=0 WARNINGS_ARE_ERRORS=-Wno-all

    首次编译经过漫长的时间之后,出现下图,恭喜你编译成功了!

    1.6 关于 readdir_r is deprecated 问题

    error: ‘int readdir_r(DIR*, dirent*, dirent**)’ is deprecated [-Werror=deprecated-declarations]

    以下摘自《JVM-Ubuntu18.04.1下编译OpenJDK8》

    查阅网上资料说是这是因为 glibc >= 2.24 的情况下,方法 readdir_r is deprecated,不支持了,通过 getconf GNU_LIBC_VERSION 检查发现 Ubuntu 20.04.4 LTS 版本为 glibc 2.31,而且也有很多人在OpenJDK上报了BUG,链接 https://bugs.openjdk.java.net/browse/JDK-8179887,6/7/8/9都不打算修复此问题,会在11修复这个BUG,所以当前只能通过其他的方式来解决,解决方案如下:

    在 ./hotspot/make/linux/makefiles/gcc.make文件中找到 WARNINGS_ARE_ERRORS=-Werro,注释该段或改成 WARNINGS_ARE_ERRORS=-Wno-all。再编译就会忽略掉警告,直到编译完成。
    当然,我是选择直接把这个选项追加到 make all 命令的末尾。

    二、CLion单步调试

    CLion这个IDE不支持Makefile,仅支持cmake,比较麻烦。因此可以在项目目录 /home/geekziyu/CLionProjects/openjdk 中添加一个 CMakeLists.txt 文件,下面仅供参考:

    cmake_minimum_required(VERSION 3.16)
    project(hotspot8)
    
    file(GLOB_RECURSE SOURCE_FILES "*.cpp" "*.hpp" "*.c" "*.h")
    
    include_directories("/home/geekziyu/CLionProjects/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/include/")
    include_directories("/home/geekziyu/CLionProjects/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/include/linux")
    include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/share/vm/prims")
    include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/share/vm")
    include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/share/vm/precompiled")
    include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/share/vm/runtime")
    include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/share/vm/utilities")
    include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/share/vm/classfile")
    include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/share/vm/oops")
    include_directories("/home/geekziyu/CLionProjects/openjdk/jdk/src/solaris/bin")
    include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/cpu/x86/vm")
    include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/share/vm/interpreter")
    
    add_executable(hotspot8 ${SOURCE_FILES})
    

    接着,从顶部菜单栏找到 Run | Edit Configurations... 点击后打开 Run/Debug Configurations 对话框

    点击左上角 + 添加 CMake Application

    1. Target 这个不重要,我选择了 All Targets
    2. Executable 选择编译后的源码中的 java 程序,我的路径为 /home/geekziyu/CLionProjects/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java
    3. Program arguments 如下所示,注意替换编译后的 Java class文件路径和待启动的 Class类名
    -XX:-PrintInterpreter
    -XX:-UseTLAB
    -XX:-TraceBytecodes
    -Xms10m
    -Xmx10m
    -XX:-UseTLAB
    -XX:+UseG1GC
    -XX:-UseConcMarkSweepGC
    -XX:-PrintGCDetails
    -XX:-TraceBytecodes
    -cp
    "/home/geekziyu/IdeaProjects/helloworld/target/classes"
    com.example.Main
    
    1. Before Launch 中的 Build 被我移除了

    关于我遇到的 Run/Debug 按钮都是灰色不可用的问题

    1. CLion 顶部菜单栏 File | Close Project

    2. 删除 .idea 文件夹 geekziyu@geekziyu-ubuntu-1:~/CLionProjects/openjdk$ rm -rf .idea

    3. CLion File | Open...,选择我们刚才创建的 CMakeLists.txt ,然后弹出对话框选择 Open As Project

    4. 弹出一个 Toolchains 配置的对话框,主要是配置 make,gcc,g++ 的路径

    5. 重新打开项目后,再重做一下 CMake Application 的配置即可

    参考文档

    JVM专家教你快速搭建单步调试openjdk环境,最新版(值得收藏)

  • 相关阅读:
    VUE 脚手架模板搭建
    defineProperty
    理解JS中的call、apply、bind方法
    Two-phase Termination模式
    打印样式设计
    浏览器内部工作原理
    Immutable Object模式
    怎么跳出MySQL的10个大坑
    控制台console
    整理的Java资源
  • 原文地址:https://www.cnblogs.com/kendoziyu/p/16546105.html
Copyright © 2020-2023  润新知