大家好,最近搭建了 openjdk 单步调试 环境,看了一些博客,过程中还是耗费很多时间,这次把步骤发出来,希望大家可以作为参照,节省环境搭建的时间。

从 gitee 上面把拉带代码,最好可以fork 一份到自己的仓库,这样以后对源码的修改可以push到远程,在跨设备工作时会更加方便,另外,个人帐号可以设置仓库为私有。

git clone https://gitee.com/mirrors/openjdk.git

切换到指定标签,从指定标签建立新分支。

git tag | grep b120
git checkout jdk8-b120
git checkout -b jdk8-b120

如果是自己的仓库,可以将新分支 push 到远程。

git remote add jdk8-b120 https://gitee.com/xxx/openjdk.git
git push jdk8-b120

接下来就是编译源码,是一个有门槛的部分,作为一名JAVA程序员,对c、c++编译,linux系统自带的gcc版本还是比较陌生的,下面会列出组件的版本。

基础环境配置

# gcc
gcc version 4.8.5 20150623
# centos
CentOS Linux release 7.9.2009 (Core)
# bootstrap java
java-se-7u75-ri

FIX: adjust

# hotspot/make/linux/makefiles/adjust-mflags.sh

# s/ -\([^        ][^     ]*\)j/ -\1 -j/ 原本在67行 删除就好
# Normalize any -jN argument to the form " -j${HBJ}"
MFLAGS=`
    echo "$MFLAGS" \
    | sed '
        s/^-/ -/
        s/ -j[0-9][0-9]*/ -j/
        s/ -j\([^     ]\)/ -j -\1/
        s/ -j/ -j'${HOTSPOT_BUILD_JOBS:-${default_build_jobs}}'/
    ' `

开始编译,先安装一波系统组件

sudo yum install libXtst-devel libXt-devel \
libXrender-devel cups-devel freetype-devel \
alsa-lib-devel -y

将 /home/xxx/xxx/java-se-7u75-ri 替换为自己的 java
若未采用上面列出的组件版本,这一步很有可能出现问题,可根据问题描述,百度解决的,需要一些耐心。

bash configure --with-target-bits=64 \
--with-boot-jdk=/home/xxx/xxx/java-se-7u75-ri \
--with-debug-level=slowdebug \
--enable-debug-symbols ZIP_DEBUGINFO_FILES=0
# Add: --with-extra-cflags=-Wno-deprecated-declarations
# Fix: cc1plus: all warnings being treated as errors
bash configure --with-target-bits=64 \
--with-boot-jdk=/home/hao/workspace/java-se-7u75-ri \
--with-debug-level=slowdebug \
--enable-debug-symbols ZIP_DEBUGINFO_FILES=0 --with-extra-cflags=-Wno-deprecated-declarations

这条命令耗时较久,可耐心等待

make all DISABLE_HOTSPOT_OS_VERSION_CHECK=OK ZIP_DEBUGINFO_FILES=0

ppa 加速配置

# 中科大:http://launchpad.proxy.ustclug.org
sudo find /etc/apt/sources.list.d/ -type f -name "*.list" -exec  sed  -i.bak -r  's#deb(-src)?\s*http(s)?://ppa.launchpad.net#deb\1 http\2://launchpad.proxy.ustclug.org#ig' {} \;

在ubuntu20 上面编译需要降低 gcc 版本,还有glibc 版本过高 需要修改文件

#查看现有glibc 版本
strings /usr/lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC

sudo vim /etc/apt/sources.list
deb http://dk.archive.ubuntu.com/ubuntu/ trusty main universe

sudo apt-get install gcc-4.8 g++-4.8 g++-4.8-multilib

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 100

# 检查 gcc 版本是否降低
gcc -v

# 配置gcc 版本
sudo update-alternatives --config gcc
sudo update-alternatives --config g++

# WARNINGS_ARE_ERRORS = -Werro 
# 替换上面的语句 WARNINGS_ARE_ERRORS = -Wno-all
vim /hotspot/make/linux/makefiles/gcc.make

重新执行 bash configure

以上就是编译步骤,每一步都有说明,若大家完成了编译,接下来就是下载IDE,开始调试了。


2024-1-15 使用ubuntu20调试openjdk时,并没有降低gcc版本。操作系统和需要编译的openjdk版本都是同时期或者主流的版本时,编译过程中的错误很少,几乎没有,大家可以借鉴一下。

软件版本
virtual box7.0.10
ubuntu20.04.6-desktop-amd64
gcc9.4
Eclipse IDE for C/C++ Developers2023-12
openjdk12-ga

configure 命令:
bash configure --with-debug-level=slowdebug --disable-warnings-as-errors
make


说起IDE的选择,就比较纠结,尝试过几个IDE,最后选择了 eclipse cpp ,原因就是当初对 C 语言很不了解,边猜边试,试了几个IDE后,在 eclipse cpp 上面很容易就可以调试了,以下就是详细说明。

下载 eclipse cpp。

https://www.eclipse.org/downloads/packages/release
https://www.eclipse.org/downloads/packages/release/2019-03/r
https://archive.eclipse.org/technology/epp/downloads/release/2019-03/R/eclipse-cpp-2019-03-R-linux-gtk-x86_64.tar.gz

下载完成直接解压,进入 eclipse 目录使用命令启动 ./eclipse

导入项目

设置调试配置



开始调试

另外可以编写一个Java文件,编译后,单步调试。只需简单修改即可。

企业微信截图_16348000127685.png

企业微信截图_16348001113681.png
增加变量:
CLASSPATH
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar:/home/xx/space/workspace-jee

JAVA_HOME
/home/xxx/code/jdk-jdk8-b115/build/linux-x86_64-normal-server-slowdebug/jdk

以上就是本次分享的 单步调试,希望可以帮助到大家,谢谢~


Mario
56 声望5 粉丝

方向大于努力,选择方向总有个期限,过了期限还要再考虑方向问题,岂不是自增烦恼