一、编译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