编译可调试的openjdk8u

该博客详细介绍了如何在Ubuntu环境下编译OpenJDK8u,包括环境准备、下载源码、配置引导JDK、安装依赖、执行编译及处理编译错误。此外,还讲解了如何使用VSCode远程连接到Linux机器,进行C/C++调试,包括安装调试插件、配置gdb server和launch.json文件,以及解决HotSpot无法打断点的问题。
摘要由CSDN通过智能技术生成

一、编译openjdk

1. 环境准备

VMware Workstation Pro + Ubuntu

2. 下载openjdk8u源码

GitHub - openjdk/jdk8u: https://wiki.openjdk.java.net/display/jdk8u

3. 下载引导jdk7

Java Platform, Standard Edition 7 ReferenceImplementations

4. 安装引导jdk7

vim ~/.bashrc

增加环境变量:

export JAVA_HOME=/home/tanxy/jdk7
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
source ~/.bashrc

 5. 安装编译所需依赖

sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev libcups2-dev libfreetype6-dev libasound2-dev ccache libfontconfig1-dev

6. 执行配置

sudo bash ./configure  --with-boot-jdk=/home/tanxy/jdk7 --with-debug-level=slowdebug --with-target-bits=64

7. 安装bear工具(sudo apt-get install bear),生成compile_commands.json文件,用于调试

sudo apt-get install

8. 编译

sudo bear make all DISABLE_HOTSPOT_OS_VERSION_CHECK=OK ZIP_DEBUGINFO_FILES=0

报错处理:

/bin/sh: 1: [: -a: unexpected operator

sudo dpkg-reconfigure dash

/bin/sh: line 0: [: too many arguments

vim make/common/MakeBase.gmk

修改make/common/MakeBase.gmk,从319的define GetSourceTips一行开始,修改如下:

define GetSourceTips
$(CD) $(SRC_ROOT) ; \
# TSIT: con't work ok.
# if [ -d $(SCM_DIR) -a "$(SCM_VERSION)" != "" ] ; then \
# $(ID_COMMAND) >> $@ ; \
# elif [ -f $(SCM_TIP_FILENAME) ] ; then \
# $(SCM_TIP_FILECMD) >> $@ ; \
# fi;

for i in $(REPO_LIST) IGNORE ; do \
if [ "$${i}" = "IGNORE" ] ; then \
continue; \
elif [ -d $${i}/$(HG_DIRECTORY) -a "$(HG_VERSION)" != "" ] ; then \
$(PRINTF) " %s:%s" \
"$${i}" `$(HG) id -i --repository $${i}` ; \
elif [ -f $${i}/$(HGTIP_FILENAME) ] ; then \
$(PRINTF) " %s:%s" \
"$${i}" `$(CAT) $${i}/$(HGTIP_FILENAME)` ; \
fi; \
done >> $@
$(PRINTF) "\n" >> $@

9. 编译成功

 二、windows远程调试Linux机器的openjdk8u

1. 调试工具准备

使用vscode进行调试,安装Remote - SSH用于连接远程Linux机器

 2. 使用vscode连接远程Linux机器

 加载远程Linux机器上的jdk8u源码

 3. 为Linux机器安装C/C++调试插件

4. Linux 安装gdb服务

sudo apt install gdb

5. Linux启动gdbserver

gdbserver *:1234 /home/tanxy/jdk8u-master/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version

6. vscode 启动调试,配置launch.json

{
          "version": "0.2.0",
          "configurations": [

              {
                  "name": "(gdb) Launch",
                  "type": "cppdbg",
                  "request": "launch",
                  "miDebuggerServerAddress": "192.168.238.128:1234", // GDB地址信息
                  "program": "${workspaceFolder}/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java", //调试程序入口
                  "args": ["-version"], // GDB参数
                  "stopAtEntry": false,
                  "cwd": "${workspaceFolder}",  //源码位置
                  "environment": [],
                  "externalConsole": false,
                  // 动态库路径
                  "MIMode": "gdb",
                  "miDebuggerPath": "/usr/bin/gdb", //重点 GDB位置,需要使用riscv32-unknown-linux-gnu-gdb版本的GDB
              }
          ]
}

7. 打断点进行调试

8. 解决hotspot无法打断点的问题

cd /home/tanxy/jdk8u-master/build/linux-x86_64-normal-server-slowdebug/jdk/lib/amd64/server
unzip libjvm.diz

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值