Vscode 附加进程调试


一、vscode 远程连接

(1)下载远程插件
在这里插入图片描述

(2)在远程端生成秘钥

#!bin/bash

if [ $# -lt 1 ]; then
    echo "usage: $0 hostname@ip"
    exit
fi
ssh-keygen
ssh-copy-id $1
cp ~/.ssh/id_rsa ./
echo "/***************************************************/\nid_rsa is in ./ now,copy it to C:\Users\testwin10/.ssh/\n/***************************************************/"

把上述代码保存为shell文件,假设名字为buildKey.sh
再执行脚本sh buildKey.sh ip@userName
ip就是远程IP地址,后面可接用户名比如root
接着就输入密码,一路回车完事,生成的秘钥id_rsa就会在当前目录下,把他复制当window主机的ssh目录下
我的电脑是这个目录:C:\Users\testwin10/.ssh/
(3)设置vscode 的ssh配置
在这里插入图片描述
在这里插入图片描述
选第一个

配置参考如下:
Host CentOs7
  HostName 192.XXX.XXX.XXX
  User root
IdentityFile C:\Users\testwin10/.ssh/id_rsa //这里就是之前在linux虚拟机生成的秘钥文件

在这里插入图片描述
点击按钮远程连接,出现左下角的图标代表连接成功,下面就可以远程调试代码了。如果出现id_rsa权限威胁的错误,执行指令chmod 600 id_rsa

二、vscode attach 调试

1.vscode 调试

vscode 调试有两种lauch 和 attach,lauch需要把执行文件跑起来再调试,然而项目文件不可能每个文件编译后再调试,此时就需要用到attach,也就是附加到进程调试。
(1)在打开的远程目录下按下F5
如果提示安装插件的话,就先按插件
有插件的话会出现以下界面在这里插入图片描述
在这里插入图片描述
下面打开lauch.json
lauch.json配置如下(示例):

   "configurations": [
    {
        "name": "(gdb) 附加",
        "type": "cppdbg",
        "request": "attach",
        "processId":"${command:pickProcess}", 
        "program": "xxx/a.out",
        "args": [],
        "stopAtEntry": false,
        "cwd": "${workspaceFolder}",
        "sourceFileMap":{
            "/AAA/": "/BBB/"
        },
        "environment": [],
        "externalConsole": false,
        "MIMode": "gdb",
        "miDebuggerPath": "/usr/bin/gdb",
        "setupCommands": [
            {
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
            }
        ]
    }
]

关键字的解释
“processId”:"${command:pickProcess}"选择这个默认值可以有一个弹窗让你选择进程,按我说的配置完毕后,按下F5,就会有如下图的弹窗出现,可以直接在输入框键入进程名,按下回车就可以开始调试了
在这里插入图片描述
“program” 是调试的远程执行文件的绝对路径
“sourceFileMap”,重点
开始我没设置这个关键字时按下F5调试时会出以下的问题:
读取文件失败,无法打开/AAA/c.cpp
但我的c.cpp文件是在/BBB/目录下的
(如果调试过程中并没有报错这可以忽视掉这个关键字)
这个时候就需要这个关键字作为映射了:

 "sourceFileMap":{
                "/AAA/": "/BBB/"
            },

另外,如果出现其他问题可以看看调试控制台的日志,这里的日志和直接用gdb指令调试是一模一样的。在这个窗口的最下面,使用-exec后可以直接根gdb指令比如-exec info registers
在这里插入图片描述
在这里插入图片描述

问题补充:
lauch.json配置 中 "sourceFileMap"可以替换源码路径,但是也会制造一点麻烦:它将使用完全限定的断点和文件路径。如果你项目有多个目录代码,你只想编译其中一个目录,编译后重新调试,你会发现这个重编的目录里面代码无法设置断点了。断点变成灰色:Module containing this breakpoint has not yet loaded or the breakpoint adress could not be obtained.

解决方法:
 "sourceFileMap":{
                "/AAA/": "/BBB/"
            },
  改成
   "sourceFileMap":{
                    "/AAA/":{
                    "editorPath" :"/BBB/",
                    "useForBreakpoints" : false
                }
            },

方法提供:https://github.com/microsoft/vscode-cpptools/issues/6658

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
VS Code 是一个强大的代码编辑器,它提供了许多功能和扩展,允许我们与远程服务器进行连接并进行代码调试。以下是使用 VS Code 附加到远程调试 Linux C 程序的简要步骤和相关插件。 首先,我们需要在本地计算机上安装 VS Code,并确保已安装 C/C++ 扩展。打开 VS Code 后,转到左侧的扩展选项,并搜索 "C/C++",然后安装该扩展。 接下来,我们需要在远程 Linux 服务器上安装 gdb 调试器。如果还没有安装,请使用适当的包管理工具在服务器上安装 gdb。 然后,在本地计算机上打开 VS Code,按下 F1 键(或者使用 Ctrl + Shift + P 组合键),并输入 "Remote-SSH: Connect to Host",选择这个选项,然后输入远程服务器的 SSH 地址和凭据进行连接。 一旦成功连接到远程服务器,我们可以打开我们要调试的 C 代码文件,并在编辑器中设置断点。然后,按下 F5 键,选择 "C++ (GDB/LLDB)" 的调试配置,并等待 VS Code 启动调试。 VS Code 会自动附加到远程服务器上正在运行的 C 程序,并在我们设定的断点处暂停程序运行。从此处开始,我们可以通过使用 VS Code 的调试功能进行单步调试、观察变量值等操作来调试我们的代码。 总结来说,要在 VS Code 中附加到远程调试 Linux C 程序,我们需要安装 VS Code 和 C/C++ 扩展,然后在远程服务器上安装 gdb 调试器。通过连接到远程服务器并使用 VS Code 的调试功能,我们就可以方便地进行 C 代码的远程调试了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值