前言
我的主力环境是 Windows 系统,但是同样需要维护一些 linux 工程代码。一般情况下,只需要开个 vmware 虚拟机,装个 linux 系统就可以进行修改,编译和调试操作,但是有时候我却需要对 linux 真机环境进行远程调试,这时候如果能直接在 windows 系统加载 linux 工程代码进行远程调试,那当然是最好不过的。经过后续的调查,发现有两个方案,一个是使用 VisualGDB
插件,一个是直接使用 vscode
,其中 VisualGDB
插件是最傻瓜的,配合 visual stduio
使用,但是我们需要寻找特别版,且需要熟悉其使用方法和配置,vscode
就相对轻量简单,大家可以根据自己的需求选择方案,这里介绍一下 vscode
配置远程linux调试的方法
流程
首先是编写 vscode
的 launch.json
文件,内容如下:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "remote-attach",
"type": "cppdbg",
"request": "attach",
"program": "/usr/bin/test",
"processId":"${command:pickRemoteProcess}",
"sourceFileMap":{
"/home/magicdmer/workplace/test": "D:/Gitwork/test"
},
"pipeTransport": {
//"pipeCwd": "/usr/local/test",
"pipeProgram": "C:/Windows/System32/OpenSSH/ssh.exe",
"pipeArgs": ["root@192.168.50.120"],
"debuggerPath": "/usr/bin/gdb"
},
"MIMode": "gdb"
}
]
}
这里要注意下面几个字段:
- processId,这个需要填写
pickRemoteProcess
, 而本地调试是pickProcess
很容易被忽略 - sourceFileMap,这个是源文件映射,我们在linux编译环境编译test调试版程序后,test程序自身会包含代码所在的位置信息,我们需要在这里把原本的位置信息映射到本地的对应目录
- pipTransport,这个就是用来远程挂载目标机器调试程序的配置信息,下面进行详细描述
pipeTransport 的配置
我们上面的配置文件使用 ssh 来进行远程通讯,其中 OpenSSH 程序应该在 win10 之后都是自带的,大家可以自行查看,如果没有的话可以自行安装一个即可
我们使用 vscode 的 Remote - SSH
系列插件后,打开远程系统上的源码文件夹,vscode 会弹框提示我们输入用户密码,但是我们进行 pipTransport 远程配置的时候,它是不会弹框提示我们输入密码的,我们必须配置一种可以无需输入密码,无需确定,直接 ssh 远程目标机器的方法,流程如下:
- 生成本地 ssh 的key文件
ssh-keygen -t rsa
ssh-keygen 也是 openssh 目录中自带的程序,运行后默认是在本地用户目录下的 .ssh 目录下
- 然后我们需要将生成的key文件拷贝到需要调试的 linux 机器,这里使用 ssh-copy-id 工具,这个工具 openssh 没有自带,需要安装 git-for-windows 或者 msys64 交叉编译环境,使用其自带的:
ssh-copy-id root@192.168.50.120
它会自动从当前系统的用户目录下的 .ssh 目录中拷贝对应文件到目标机器,写入相关配置文件,如果需要指定目录文件,可以使用 -i 选项指定证书文件
- 然后我们使用 cmd 命令行,用 ssh 连接一次远程机器,会提示是否继续连接,我们输入 yes 继续,它会保留我们的选择,这样就完成了无需密码和确认直接连接远程 linux 环境的配置操作
最后,我们就可以愉快的玩耍了