一:场景

如果你是mac系统 或者类型linux系统上,可以直接用工具进行debug。

可是我是Windows怎么弄呢?怎么调试openjdk呢?

一是 用Windows版本的openjdk进行编译然后debug(问题多多……因为要在Windows上模拟linux环境进行编译 需要下载很多软件 还有各种配置 ,本人已放弃。如果有人编译了 Windows版本的openjdk 请发出来 谢谢)

二是 在linux上进行编译,这个相对简单多了(可以参考我之前的那篇 linux上编译openjdk),编译好了,此时怎么弄呢?在Windows上 这里推荐 Clion+gdbserver 远程debug方式。

二:解决方案大体思路

linux上编译,Windows上借用 Clion+gdb进行远程debug测试

三:具体实现步骤

前言 本人openjdk版本 1.8_252 Clion版本2020.2 gdb 版本 自带的

1. 在linux上进行编译openjdk

参考: linux编译 openjdk

2. 编译后的openjdk源码 下载到Windows中

3. 用Clion 导入 使用 new Cmake 方式导入,并等待更新好

4.写个最简单的java代码 ,进行测试,不要包名,因为这个后面会放服务器上

public class Test {

public static void main(String[] args) {

System.out.println(">>>>>>>>>>>>>>>>"+Thread.currentThread().getName());

}

}

5.把这个java文件放服务器上,位置是 openjdk生成的 bin目录位置,也就是生成的 build 目录下的jdk中bin目录 (这个目录都是生成的,里面就可以看到我们熟悉的 命令 )

6.用bin里面的命令编译我们刚放进去的java文件 ( -g 是为了能生成一些有用的信息)

javac -g Test.java

7. 安装 gdbserver (如果没有gdbserver 需要安装下 )

yum install -y gdb-gdbserver

8.Windows上的Clion配置远程调用

path mapping 那需要写上对应的目录 ,这个要对好 我都是写到 openjdk 这

9.在linux上开启 监听

gdbserver :1234 java Test

如图表示成功:

10.Windows中Clion 开启断点 断点进来了 表示成功,下面就可以愉快的玩耍了

提问:有些杠精 说我们知道要在哪里打断点,我怎么知道入口是 main.c 文件???

处理:我们可以用gdb 查看,(后续我的视频 或者文档 跟进 openjdk 源码大都都是 经验了 每次 gdb验证下 还是挺麻烦的)

1. 还在我们生成的bin位置

gdb java (表示我们要debug java程序)

set args Test (Test 是我们生成的class文件)

start

可以看到 第一个断点位置 main.c 文件97行。(这下没人杠精了吧 )

举报/反馈

程序员坤哥

0获赞 24粉丝
专注java底层技术的码农
关注
0
0
收藏
分享