栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

编译可调试的openjdk8u

Java 更新时间:发布时间: 百科书网 趣学号

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

 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. 打断点进行调试

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/888654.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号