VScode 是目前非常流行的编辑器之一,是一种基于 Electron 开发的桌面版应用。作为一种桌面软件限制了在服务器端的应用。而目前比较流行的服务器端的编辑器主要是 vim 和 emacs 。想利用 VScode 远程调试程序,需要在服务端(Linux GLIBC2.17+)安装 VScode code-server 和相应插件,本地开发客户端(Windows)安装 VScode和相应插件。
如果开发服务器本身可以上网,则不需要特别安装。按照操作提示一步步安装就可以。否则要手动安装一些插件。本文假定开发服务器可以连接外网。
开发服务端一定配置好 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
参考下面的文章,本地安装好VSCode java开发环境:
VSCode编译调试本地Java代码
过程很简单,我是在 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
Remote Development插件提供了通过ssh的方法连接到远程机器上,另外插件还提供了连接到WSL和容器的功能。
VScode 快捷键:Ctrl+Shift+X,查找 Remote Development 并安装 Visual Studio Code Remote Development Extension Pack
VScode 快捷键:Ctrl+Shift+P,输入:Remote-SSH: Settings
Win7 打开 cmd,随便进入一个本地空目录,按命令打开 VSCode:
C:\Users\zhang\Workspace\debugjava > code .
这样就打开一个空的工程。依次点击左侧的 1 Remote Explorer > 2 Add New
最后选 4,保存配置到 .ssh\config 文件里 (这个文件可以删除,然后重复1-4的过程):
最后看到的样子如下。这个配置是全局的,只要 .ssh 目录下的config 存在,就会出现相应的配置(按Remote Explorer后)。当然也可以直接更改这个配置文件(yaml样式),加入更多的远程机器。然后按 5 Connect to Host …从新窗口打开远程机器。
config 的一个例子(2个服务器)
Host ubuntu_pc
HostName 192.168.94.107
User clHost rhel6_server
HostName 192.168.39.111
User root
Allow是个安全提示,可能是我没有用root登录。
Reload 是个插件。更改配置之后重新load窗口。
其实这时候调试还不行,还要安装 Debugger For Java,我这个已经装好了:
最后还要建2个配置.vscode的文件,如下图:
## 开始java远程debug
打开源代码,双击设置断点。按F5启动调试。一切顺利。