Mac 编译并调试 OpenJDK11

本文详细记录了在MacOSBigSur系统下编译OpenJDK的步骤,包括下载源码、安装必要的工具(如Homebrew、FreeType、Autoconf、ccache)、配置与初始化、编译及调试环境的设置。通过Clion导入OpenJDK源码并配置调试,指导读者如何进行源码级别的调试,包括解决可能出现的文件找不到问题和设置lldb断点。
摘要由CSDN通过智能技术生成

鉴于目前Mac下编译openJDK的文章较为杂乱且步骤不够清晰明了,写下自己编译OpenJDK的过程,希望能帮助大家少走弯路。

编译/调试 环境

  1. MacOS Big Sur
  2. Clion 2021.2
  3. IDEA 2021.2
  4. Terminal(Mac自带的终端)

编译步骤

下载源码

进入https://hg.openjdk.java.net/jdk/选择你需要编译的版本。

进入下载目录并解压

选择你下载的压缩包对应的解压命令解压。

打开终端并进入源码目录

本次编译我的jdk源码目录为: /Users/alex/apps/jdk11-1ddf9a99e4ad

安装相关工具

brew install FreeType
brew install Autoconf
brew install ccache

如果上述安装中提示你有什么文件没找到,无法打开,进入那个目录,将对应的文件找出并且重命名即可。注意以下命令中的${username}需替换为你的用户名。

cd /Users/${username}/Library/Caches/Homebrew/downloads/
## 假设提示你 883c03046842ddf554a02eed5bce40b6641f7f2fe2b6ee8fda64c663fd609239--pcre2-10.37_1.big_sur.bottle.tar.gz 没找到
ls | grep 'pcre2'
## 输出38089acf544a53cf2436d7390138f6b0cda498f61a14c854457242f07a99e886--pcre2--10.37_1.big_sur.bottle.tar.gz
mv 38089acf544a53cf2436d7390138f6b0cda498f61a14c854457242f07a99e886--pcre2--10.37_1.big_sur.bottle.tar.gz 883c03046842ddf554a02eed5bce40b6641f7f2fe2b6ee8fda64c663fd609239--pcre2-10.37_1.big_sur.bottle.tar.gz

初始化配置

bash ./configure --with-target-bits=64 --enable-ccache --with-jvm-variants=server --enable-dtrace --with-boot-jdk-jvmargs="-Xlint:deprecation -Xlint:unchecked" --disable-warnings-as-errors --with-debug-level=slowdebug 2>&1 | tee configure_mac_x64.log

开始编译

make images

调试

源码目录新增CMakeLists.txt文件

文件内容:

cmake_minimum_required(VERSION 3.16)
project(hotspot)

file(GLOB_RECURSE SOURCE_FILES "*.cpp" "*.hpp" "*.c" "*.h")

add_executable(hotspot ${SOURCE_FILES})

打开Clion导入openJDK

File->Open->choose your jdk path->As Cmake project

等待Clion index完成

构建编译环境

右上角edit configurations,选择hotspot | Debug

  1. Executable,选择你编译好的java可运行程序。我的目录:/Users/alex/apps/jdk11-1ddf9a99e4ad/build/macosx-x86_64-normal-server-slowdebug/jdk/bin/java
  2. Program arguments,-version。
  3. Before launch,下面有一栏:Build。删掉。
  4. 点运行,不出意外就能看见下面的输出。
    在这里插入图片描述
    在这里插入图片描述
    至此,调试环境构建完毕。

debug

以下内容引用自简书https://www.jianshu.com/p/0fc877be4c3d,侵权删。

如果你点的是debug而不是run,你会发现你没打断点,但是会进入以下这个断点,此时我们在LLDB tab下执行pro hand -p true -s false SIGSEGV SIGBUS命令即可。
在这里插入图片描述
在这里插入图片描述
不过每次debug的时候都要输入这么一句就很麻烦,所以我们可以在~/.lldbinit文件中写入如下内容(其中main.c文件的路径自行替换)
breakpoint set --file /Users/alex/apps/jdk11-1ddf9a99e4ad/src/java.base/share/native/launcher/main.c --line 98 -C "pro hand -p true -s false SIGSEGV SIGBUS" --auto-continue true

vim ~/.lldbinit

外部JAVA文件调试JDK

edit configurations-> 左上角“+” -> Custom Build Application.
红圈为需要自行配置。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
调试结果:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值