主要讲解linux环境编译,windows使用clion编辑器启用远程调试
1、编译
首先需要编译出带 symbol调试信息的jdk
jdk编译参考 OpenJdk8编译
bash configure --with-freetype-include=/usr/include/freetype2 --with-freetype-lib=/usr/lib/x86_64-linux-gnu --openjdk-target=x86_64-unknown-linux-gnu --with-debug-level=slowdebug --disable-zip-debug-info
如果是windows使用clion远程调试 linux的jdk的情况下,需要注意加上 --disable-zip-debug-info ,这个参数的作用是禁止压缩debug信息文件
对比一下压缩前后的文件
经过压缩的文件
未压缩的文件
可以看到,压缩后的是.diz后缀的,未经过压缩的是.debuginfo后缀的
使用gdb调试的情况下,无法直接读取到.diz后缀的文件,因此这里一定要禁止压缩,否则的话无法对jvm的代码进行调试
(找了很久原因,最后通过对比才发现是文件被压缩的问题!)
2、 安装gdbserver
对于本地的gdb调试,其交互是 gdb--→ 二进制程序
而对于远程的gdb调试,交互是 gdb--→ gdbserver --→ 二进制程序
因此在linux 程序端上需要安装gdbserver
apt-get install -y gdbserver
启用
gdbserver :1234 ./java xxxxxx.jar
3、clion使用
clion中配置好gdbserver的ip端口即可
效果如下: 定位到了jvm所在的源码文件中