VSCode远程开发与调试java程序

VScode 是目前非常流行的编辑器之一,是一种基于 Electron 开发的桌面版应用。作为一种桌面软件限制了在服务器端的应用。而目前比较流行的服务器端的编辑器主要是 vim 和 emacs 。想利用 VScode 远程调试程序,需要在服务端(Linux GLIBC2.17+)安装 VScode code-server 和相应插件,本地开发客户端(Windows)安装 VScode和相应插件。

1. 服务端(Linux GLIBC2.17+)安装code-server 和相应插件

如果开发服务器本身可以上网,则不需要特别安装。按照操作提示一步步安装就可以。否则要手动安装一些插件。本文假定开发服务器可以连接外网

开发服务端一定配置好 java 和 maven 的开发环境。主要就是几个环境变量(参考Linux上安装Java开发环境),我的配置如下:

export MAVEN_HOME=/usr/local/apache/apache-maven-3.3.3
export JAVA_HOME=/usr/local/apache/java/jdk1.8.0_152
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$MAVEN_HOME/bin

2. 开发客户端(Windows)安装 VScode和相应插件

参考下面的文章,本地安装好VSCode java开发环境:

​​VSCode编译调试本地Java代码​​

  • Windows上安装 openssh client

过程很简单,我是在 Windows 7 客户端上实践的。首先是安装 git-scm,参考:

​​VSCode结合git客户端的使用方法​​

核心就是要在系统环境变量 Path 中加入 %GITSCM_HOME%\usr\bin,这样在 cmd 里输入 ssh,scp 这些命令无碍。生成 Windows用户的本地公钥私钥对(C:\Users\用户.ssh\):

cmd
C:\> ssh-keygen
  • 测试本地客户端免密登录开发服务器

确保通过 cmd > ssh remoteuser@remoteip 可以登录远程机器:

将本机的 C:\Users\用户\.ssh\id_rsa.pub 加入到远程机器信任(ssh 免密登录)。我是用 cygwin 实现把Windows用户的公钥加入到远程服务器(code)上。如下:

cygwin 命令行中:
$ cd /cygdrive/c/Users/zhang/.ssh
$ ssh-copy-id -i id_rsa.pub root@code

然后打开 cmd 命令行测试登录远程机器即可(不再需要输入密码):

cmd 命令行:
C:\> ssh root@code
  • VScode 安装和使用 Remote Development

Remote Development插件提供了通过ssh的方法连接到远程机器上,另外插件还提供了连接到WSL和容器的功能。

VScode 快捷键:Ctrl+Shift+X,查找 Remote Development 并安装 Visual Studio Code Remote Development Extension Pack

VScode 快捷键:Ctrl+Shift+P,输入:Remote-SSH: Settings

3. 开发客户端(Windows7)连接到远程开发Linux服务器(以Ubuntu1804为例)

Win7 打开 cmd,随便进入一个本地空目录,按命令打开 VSCode:

C:\Users\zhang\Workspace\debugjava > code .

这样就打开一个空的工程。依次点击左侧的 1 Remote Explorer > 2 Add New

VSCode远程开发与调试java程序_Java


然后3 输入ssh登录的信息回车:

VSCode远程开发与调试java程序_remote_02

最后选 4,保存配置到 .ssh\config 文件里 (这个文件可以删除,然后重复1-4的过程):

VSCode远程开发与调试java程序_VSCode_03

最后看到的样子如下。这个配置是全局的,只要 .ssh 目录下的config 存在,就会出现相应的配置(按Remote Explorer后)。当然也可以直接更改这个配置文件(yaml样式),加入更多的远程机器。然后按 5 Connect to Host …从新窗口打开远程机器。

config 的一个例子(2个服务器)

Host ubuntu_pc
HostName 192.168.94.107
User cl

Host rhel6_server
HostName 192.168.39.111
User root

VSCode远程开发与调试java程序_linux_04

连接到远程服务器成功后,如下图。按6打开你的远程工程目录。

VSCode远程开发与调试java程序_linux_05

最后看看远程工程打开的样子:

VSCode远程开发与调试java程序_Java_06

右下角的红圈:

Allow是个安全提示,可能是我没有用root登录。
Reload 是个插件。更改配置之后重新load窗口。

其实这时候调试还不行,还要安装 Debugger For Java,我这个已经装好了:

VSCode远程开发与调试java程序_debug_07

最后还要建2个配置.vscode的文件,如下图:

VSCode远程开发与调试java程序_remote_08

## 开始java远程debug

打开源代码,双击设置断点。按F5启动调试。一切顺利。

VSCode远程开发与调试java程序_linux_09