vscode配置远程linux系统调试

发布时间 2023-10-19 17:40:56作者: magicdmer

前言

我的主力环境是 Windows 系统,但是同样需要维护一些 linux 工程代码。一般情况下,只需要开个 vmware 虚拟机,装个 linux 系统就可以进行修改,编译和调试操作,但是有时候我却需要对 linux 真机环境进行远程调试,这时候如果能直接在 windows 系统加载 linux 工程代码进行远程调试,那当然是最好不过的。经过后续的调查,发现有两个方案,一个是使用 VisualGDB 插件,一个是直接使用 vscode ,其中 VisualGDB 插件是最傻瓜的,配合 visual stduio 使用,但是我们需要寻找特别版,且需要熟悉其使用方法和配置,vscode 就相对轻量简单,大家可以根据自己的需求选择方案,这里介绍一下 vscode 配置远程linux调试的方法

流程

首先是编写 vscodelaunch.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"
        }
    ]
}

这里要注意下面几个字段:

  1. processId,这个需要填写 pickRemoteProcess, 而本地调试是 pickProcess 很容易被忽略
  2. sourceFileMap,这个是源文件映射,我们在linux编译环境编译test调试版程序后,test程序自身会包含代码所在的位置信息,我们需要在这里把原本的位置信息映射到本地的对应目录
  3. pipTransport,这个就是用来远程挂载目标机器调试程序的配置信息,下面进行详细描述

pipeTransport 的配置

我们上面的配置文件使用 ssh 来进行远程通讯,其中 OpenSSH 程序应该在 win10 之后都是自带的,大家可以自行查看,如果没有的话可以自行安装一个即可

我们使用 vscode 的 Remote - SSH 系列插件后,打开远程系统上的源码文件夹,vscode 会弹框提示我们输入用户密码,但是我们进行 pipTransport 远程配置的时候,它是不会弹框提示我们输入密码的,我们必须配置一种可以无需输入密码,无需确定,直接 ssh 远程目标机器的方法,流程如下:

  1. 生成本地 ssh 的key文件
    ssh-keygen -t rsa
    
    ssh-keygen 也是 openssh 目录中自带的程序,运行后默认是在本地用户目录下的 .ssh 目录下
  2. 然后我们需要将生成的key文件拷贝到需要调试的 linux 机器,这里使用 ssh-copy-id 工具,这个工具 openssh 没有自带,需要安装 git-for-windows 或者 msys64 交叉编译环境,使用其自带的:
    ssh-copy-id root@192.168.50.120
    
    它会自动从当前系统的用户目录下的 .ssh 目录中拷贝对应文件到目标机器,写入相关配置文件,如果需要指定目录文件,可以使用 -i 选项指定证书文件
  3. 然后我们使用 cmd 命令行,用 ssh 连接一次远程机器,会提示是否继续连接,我们输入 yes 继续,它会保留我们的选择,这样就完成了无需密码和确认直接连接远程 linux 环境的配置操作

最后,我们就可以愉快的玩耍了