CentOS 8.1安装Visual Studio Code调试OpenJDK

编译最新OpenJDK

继上一篇文章《Java工程师尝鲜:编译最新OpenJDK
之后,内心还是很慌乱:编译个JDK太简单了,似乎没有任何技术含量,本篇继续编译之后的工作,一步一步搭建一个调试JDK的环境。

环境准备

环境说明

项目版本说明
VMware15.5Windows上安装Linux系统必备
操作系统CentOS 8.1CentOS最新社区开源版本
基础JDK13.0.2运行java程序及编译最新JDK需要
Visual Studio Code1.43.2 for Linux调试需要的工具链
Linux登录用户peterchen在使用时用${user}替换,指代当前登录用户的用户名

安装环境

VMware安装

下载地址:
https://my.vmware.com/en/web/vmware/info/slug/desktop_end_user_computing/vmware_workstation_pro/15_0?wd=&eqid=95cf61ac00012630000000065e8ad569
安装步骤:
请查看百度经验:
https://jingyan.baidu.com/article/e2284b2ba81236e2e6118d89.html

Visual Studio Code 安装

官网教程地址:
https://code.visualstudio.com/docs/setup/linux#_rhel-fedora-and-centos-based-distributions
安装步骤
1.打开终端
在这里插入图片描述
2.切换用户
从当前登录用户切换到root用户

su -

然后输入root用户密码
在这里插入图片描述
3.配置dnf源

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'

4.进行安装
如果因为网络问题中断请多试几次

cd /opt
sudo dnf check-update
sudo dnf install code

5.创建桌面快捷方式
查看安装目录

whereis code

在这里插入图片描述
注意这个目录:/usr/share/code
另外visual studio code的图标文件在:/usr/share/code/resources/app/resources/linux 目录下

创建快捷方式

vim /usr/share/applications/VSCode.desktop

添加以下内容:

[Desktop Entry]
Name=Visual Studio Code
Comment=Multi-platform code editor for Linux
Exec=/usr/share/code/bin/code
Icon=/usr/share/code/resources/app/resources/linux/code.png
Type=Application
StartupNotify=true
Categories=TextEditor;
MimeType=text/plain;

:wq!保存退出
将快捷方式复制到当前登录用的桌面:

cp /usr/share/applications/VSCode.desktop /home/${user}/Desktop

在这里插入图片描述
修改权限

chown ${user} /home/${user}/Desktop/VSCode.desktop

设置允许快捷方式执行
在这里插入图片描述
如果这一步中没有看到Allow Launching 则需要选择Rename进行重命名,将名字后面的.desktop删掉,然后再设置可执行,成功后的效果如下:
在这里插入图片描述
到此Visual Studio Code就在CentOS 8.1中安装成功。

其他安装

其他必要的安装可百度,OpenJDK编译请参考:《Java工程师尝鲜:编译最新OpenJDK

正式调试

构建VS工程

在CentOS系统中打开终端切换root用户,并进入已成功编译过的OpenJDK根目录(笔者是放置在openjdk14中)

cd /opt/openjdk/
make vscode-project

在这里插入图片描述

导入VS工程

打开Visaul Studio Code点击 File --> Open Workspace…
在这里插入图片描述
进入上一步执行make vscode-project 成功后输出的目录,点击OPEN即可将项目导入:
在这里插入图片描述
在这里插入图片描述
导入后会出现一个警告,警告的含义是当前Visual Studio Code打开的workspace文件太多已超出限制,需要做一些配置,我们点击蓝色按钮(Instuctions)可以跳转到官网找到解决方案:
在这里插入图片描述
解决方案是在终端查看当前文件限制数并修改其设置:

cat /proc/sys/fs/inotify/max_user_watches

在这里插入图片描述
默认文件句柄限制为8192,通过以下命令修改:

vim /etc/sysctl.conf

在文件最后增加以下内容:
fs.inotify.max_user_watches=524288

然后:wq保存退出,再执行以下命令使配置生效:

sudo sysctl -p

安装C/C++编译插件
在这里插入图片描述
安装Code Runner插件
在这里插入图片描述
重新启动Visual Studio Code,我们看到完整的jdk源码及编译文件结构:
在这里插入图片描述

调试OpenJDK

点击VScode的debug按钮,我们可以看到如下内容:
在这里插入图片描述
在“2.点击下拉框”我们看到两个可以执行的选项
gtestLauncher
java

这是jdk源码调试的两个入口,我们先使用默认的gtestLauncher,然后点击右边的齿轮,VScode会打开一个luanch.json的配置文件,其内容是:

{
    "version": "0.2.0",     
    "configurations": [
        {
            "name": "gtestLauncher",  // 配置名称,将会在启动配置的下拉菜单中显示
            "type": "cppdbg",  // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg
            "request": "launch",  // 请求配置类型,可以为launch(启动)或attach(附加)
            "program": "/opt/openjdk14/build/linux-x86_64-server-release/hotspot/variant-server/libjvm/gtest/gtestLauncher",  // 将要进行调试的程序的路径
            "args": ["-jdk:/opt/openjdk14/build/linux-x86_64-server-release/jdk"],  // 程序调试时传递给程序的命令行参数
            "stopAtEntry": false,  // 设为true时程序将暂停在程序入口处,相当于在main上打断点
            "cwd": "/opt/openjdk14", // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
            "environment": [], // 环境变量
            "externalConsole": false, // 为true时使用单独的cmd窗口,与其它IDE一致;18年10月后设为false可调用VSC内置终端TERMINAL
            "preLaunchTask": "Make 'exploded-image'", 
            "osx": {
                "MIMode": "lldb",
                "internalConsoleOptions": "openOnSessionStart",
                "args": ["--gtest_color=no", "-jdk:/opt/openjdk14/build/linux-x86_64-server-release/jdk"]
            },
            "linux": {
                "MIMode": "gdb",  // 指定连接的调试器,可以为gdb或lldb,linux下默认使用gdb
                "setupCommands": [
                    {
                        "text": "handle SIGSEGV noprint nostop",
                        "description": "Disable stopping on signals handled by the JVM"
                    }
                ]
            }
        },
        {
            "name": "java",
            "type": "cppdbg",
            "request": "launch",
            "program": "/opt/openjdk14/build/linux-x86_64-server-release/jdk/bin/java",
            "stopAtEntry": false,
            "cwd": "/opt/openjdk14",
            "environment": [],
            "externalConsole": false,
            "preLaunchTask": "Make 'exploded-image'",
            "osx": {
                "MIMode": "lldb",
                "internalConsoleOptions": "openOnSessionStart",
            },
            "linux": {
                "MIMode": "gdb",
                "setupCommands": [
                    {
                        "text": "handle SIGSEGV noprint nostop",
                        "description": "Disable stopping on signals handled by the JVM"
                    }
                ]
            }
        }
    ]
}

我们根据配置文件找到调试入口:/opt/openjdk14/build/linux-x86_64-server-release/hotspot/variant-server/libjvm/gtest/gtestLauncher
但这是个so的二进制文件,对应的cpp文件在源码目录下,我们将luanch.json中的"stopAtEntry"改为true,让他启动时在main函数处断点,这样我们就可以很快找到对应的源文件了,修改后点击RUN旁边的箭头启动debug:
在这里插入图片描述
很快程序就会进入main函数的断点:
在这里插入图片描述
VScode会自动将调试入口的源程序gtestLuancher.cpp打开,并在main函数中断点。这样我们就可以愉快的进行调试了,常用的快捷键是:

F5: 运行至下一个断点
F10: 一行一行的执行,如果某一行是一个函数的调用,不进入该函数
F11: 一行一行的执行,如果某一行是一个函数的调用,会进入该函数
shift + F11: 跳出方法
Ctrl + F10: 执行到光标处

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页