Vscode远程调试及gdbserver配置

news2025/4/8 9:18:25

如果你像我一样更喜欢使用 GUI 而不是命令行来设置断点、单步调试代码以及​​在程序运行时检查值,那么您可以通过以下方法设置 VSCode 和 gdbserver 以在运行时在本地编辑和调试代码它在远程服务器上。

注意:我在本地使用 macOS Sierra,远程计算机运行 Ubuntu 14.04,但本指南适用于任何 Unix 系统。(对不起,Windows 用户)。

注意:要在远程计算机上运行的命令以 为前缀remote$,本地命令以 为前缀local$

1.在远程机器上安装gdbserver

安装因系统而异。在 Debian/Ubuntu 上,您可以执行以下操作:

remote$ apt-get install gdbserver

我使用Linuxbrew将其安装到我的用户文件夹中:

remote$ brew install gdbserver

2. 在本地机器上安装gdb

在 macOS Sierra 上,我使用Homebrew安装 gdb:

local$ brew install gdb --with-all-targets

注意:--with-all-targets选项很重要;如果没有它,您将无法在操作系统或体系结构与本地计算机不同的远程计算机上进行调试。

3.测试gdb

此时,您应该能够在远程计算机上运行 gdbserver 并从本地 gdb CLI 连接到它。我将使用ssh-L选项将本地端口 9091 连接转发到远程端口 9091:

local$ ssh -L9091:localhost:9091 user@remote
remote$ cd ./myproject/ && make
remote$ gdbserver :9091 ./myprogram

(端口 9091 是任意的;使用您喜欢的任何端口号)

让该命令在终端窗口中运行;它会等到 gdb 连接后再运行./myprogram

在本地计算机上的另一个终端窗口中,运行 gdb:

local$ gdb
GNU gdb (GDB) 7.12
Copyright (C) 2016 Free Software Foundation, Inc.
...
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb)

然后连接到 gdbserver 实例:

(gdb) target remote localhost:9091
Remote debugging using localhost:9091
...
(gdb)

要验证一切是否正常,您可以运行各种 gdb 命令,例如info sources,或使用 来设置断点break。使用continue来运行./myprogram.

4. 协同设计gdb

VSCode 会阻止您运行 gdb,除非它已签名

5.同步本地和远程文件系统

您可能已经注意到,对于基本功能,本地计算机上的 gdb CLI 不需要提供有关程序或其源代码的任何信息,除了运行 gdbserver 的主机和端口之外。但您希望保持本地和远程项目目录同步有两个重要原因:

  • 在 gdb CLI 中查看源代码(即list)。
  • VSCode C/C++ 扩展要求您提供已编译可执行文件的路径以启动 gdb。("program"launch.json 中的字段)。

我选择使用sshfs,因为它需要最少的服务器端设置,但您可以使用 NFS、rsync 或其他替代方案。

使用 sshfs,在本地挂载远程项目文件夹:

local$ mkdir ./myproject
local$ sshfs user@remote:myproject ./myproject

注意:在 macOS 上,您可以稍后使用 卸载该目录umount ./myproject。在 Linux 上,使用fusermount -u ./myproject.

6. 配置 Visual Studio 代码

./myproject/在 VSCode 中打开新安装的项目,然后打开.vscode/launch.json或创建它(如果不存在):

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "C++ Launch",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceRoot}/myprogram",
      "miDebuggerServerAddress": "localhost:9091",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceRoot}",
      "environment": [],
      "externalConsole": true,
      "linux": {
        "MIMode": "gdb"
      },
      "osx": {
        "MIMode": "gdb"
      },
      "windows": {
        "MIMode": "gdb"
      }
    }
  ]
}

此配置将使单击“C++ Launch”将运行类似于以下内容的 gdb:

local$ gdb ./myprogram
...
(gdb) target remote localhost:9091

7. 编写脚本来编译程序并启动 gdbserver

理想情况下,您希望能够运行单个命令或单击单个按钮来编译和调试程序。

这可能可以通过VSCode 任务和preLaunchTasklaunch.json 中的选项来完成,但我无法使用这些任务组合一个简单的解决方案。

相反,我编写了一个快速而肮脏的 shell 脚本prepare_remote_debug.sh

# Kill gdbserver if it's running
ssh user@remote killall gdbserver &> /dev/null
# Compile myprogram and launch gdbserver, listening on port 9091
ssh \
  -L9091:localhost:9091 \
  user@remote \
  "zsh -l -c 'cd myproject && make && gdbserver :9091 ./myprogram'"

8.开始调试

这是您的新工作流程:

  1. 编辑一些代码。
  2. ./prepare_remote_debug.sh在终端窗口中运行。您的程序的输出将出现在这里。
  3. 设置一些断点。
  4. 运行“C++ 启动”。
  5. 在 VSCode 的调试器中单步执行代码。
  6. 重复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1011793.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

低功耗无线扫描唤醒技术,重塑物联网蓝牙新体验

随着人类社会活动的信息化和通信技术的发展,传统设施越来越倾向于网络化、无线化。物联网被人们视为继计算机、互联网之后信息技术产业发展的第三次革命。无线短距离通信方式是物联网的主要通信方式之一,随着物联网终端通信设备应用越来越广,…

Python匿名函数

简单来说,匿名函数就是懒。 结构 函数名 lambda 参数 : 函数体 fun lambda x,y : x*y*y fun(3,5)优点 可以让写代码更“懒”一点

锐捷RG-UAC统一上网行为管理审计系统信息泄漏漏洞

一、漏洞简介 锐捷RG-UAC统一上网行为管理审计系统存在账号密码信息泄露,可以间接获取用户账号密码信息登录后台 。 二、影响版本 锐捷RG-UAC统一上网行为管理审计系统 三、资产测绘 hunterapp.name"Ruijie 锐捷 RG-UAC"登录页面 四、漏洞复现 F12搜索super_…

ERR_CONNECTION_REFUSED等非标准的HTTP错误状态码原因分析和解决办法

文章目录 DNS Resolution Failed- DNS服务器故障- DNS配置错误- DNS劫持- 域名过期- 其他网络问题 ERR_CONNECTION_REFUSED-"ERR_CONNECTION_REFUSED" 错误可能有多种原因 ERR_SSL_PROTOCOL_ERROR"ERR_SSL_PROTOCOL_ERROR" 错误的原因和解决办法1. SSL/TLS…

睿趣科技:现在开抖音小店还来得及吗

抖音,作为一款风靡全球的社交短视频应用,已经在短短几年内改变了人们的生活方式和商业模式。随着抖音上涌现出越来越多的网红和小店,许多人开始考虑是否还有机会在这个领域创业。那么,现在开抖音小店还来得及吗? 首先&#xff0c…

HPE财报:计算存储微降,智能边缘大幅增长

科技软件巨头惠普集团在2015年11月的时候进行了拆分,惠普拆分为两家上市公司: ①专注销售服务器、软件、存储、网络和相关服务的惠普企业,后改名慧与(HPEnterprise,美股代码HPE), ②销售打印机和个人电脑的…

Packet Tracer中交换机的配置及Lab2实验

交换机是计算机网络中的一种网络设备,用于在局域网内传输和转发数据包。它具有数据包转发、数据包过滤、VLAN划分和端口管理等功能,能够实现高速、可靠和安全的数据传输,并支持网络的管理和控制。交换机在网络中发挥着连接终端设备和实现数据…

Talk | ICCV‘23北京通用人工智能研究院黄江勇:ARNOLD-三维场景中基于语言的机器人任务学习

本期为TechBeat人工智能社区第531期线上Talk! 北京时间9月14日(周四)20:00, 北京通用人工智能研究院实习研究员—黄江勇的Talk已准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “ARNOLD-三维场景中基于语言的机器人任务学习”&…

780. 到达终点;2360. 图中的最长环;1871. 跳跃游戏 VII

780. 到达终点 核心思想:正难则反,如果从起点到终点很难想。那么我们就考虑从终点到起点,由于起点为正数,那么终点(x,y)的上一步一定是(x-y,y)或者(x,y-x)很明显肯定是大值减去小的…

GDB之调试手段之生成与加载coredump文件(十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

用python实现音乐下载

前言 本文背景 最近对音乐比较有需求,想着用自己学的python来实现一下下载需求, 真的是拿着锤子在满世界找钉子,**文末附全部代码**声明: 本文仅作技术交流,禁止用于其他非法途径本文2023年9月15日是可用的&#xff…

SSL Windows环境诊断修复工具,保持shell连接活跃

SangforHelperToolInstaller.exe 接入内网遇到网络故障,修复网络问题,可以使用这个软件,修复网络问题非常强大。

live555 groupsock目录下文档解读

文章目录 groupsock/GroupEId.hhGroupsockHelper.hhGroupsock.hhgroupsock_version.hhIOHandlers.hhNetAddress.hhNetCommon.hNetInterface.hhGroupEId.cpp后续还会更新 groupsock/ groupsock/ ├── COPYING -> …/COPYING ├── COPYING.LESSER -> …/COPYING.LESSE…

python使用钉钉机器人给钉钉发送消息

import requestsdef dingmessage(msg):urlhttps://oapi.dingtalk.com/robot/send?access_token2c5e2b764129e936ba9c43713a588caa7eeb168c132223a91ba97d80a6fee337data{msgtype:text,text:{content: 通知:msg}}resrequests.post(url,jsondata)

ArrayList二维数组的嵌套写法(Java)

一维数组的插入 for(int i0;i<m;i){for(int j0;j<n;j){l.add(grid[i][j]);}} 二维数组插入&#xff1a;每次向里面插入List类型数据 for(int i0;i<m;i){List<Integer>lnew ArrayList<>();for(int j0;j<n;j){l.add(grid[i][j]);}list.add(l);} 力扣&a…

GDB之保存历史命令(十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

千巡翼X1带状任务功能

“小身材大能量的千巡翼X1无人机”新增带状任务功能。带状任务是针对像河流、管线、道路等带状区域进行正射影像数据采集而开发的新功能&#xff0c;如下所示。 带状任务可以根据带状测区的方位走向生成合适的航线&#xff0c;相比于使用多边形任务来规划带状区域的任务&#x…

记录第一个启动代码的诞生

核使用R52&#xff0c;参考汇编模板&#xff0c;一步一步来实现。 首先是ld文件&#xff0c;这个没啥好说的&#xff0c;主要是关注给vector_table划一块地址、stack地址&#xff0c;如下&#xff1a; .text.intvec :{_vectors_start .;KEEP(*(.text.intvec))_vectors_end .;…

【谢希尔 计算机网络】第1章 计算机网络概述

目录 1.1.1计算机网络概念&#xff0c;功能&#xff0c;组成&#xff0c;分类 计算机网络的概念 计算机网络的功能 计算机网络的组成 计算机网络的分类 1.1.2标准化工作 1.1.3速率相关的性能指标 速率 带宽 吞吐量 时延 时延带宽积​编辑 往返时延RTT 利用率 1.…

(matplotlib)如何不显示x轴或y轴刻度(ticks)

文章目录 背景plt版本ax子图版本 解决办法plt版本ax子图版本 背景 import numpy as np import matplotlib.pyplot as pltplt版本 x[1,2,3] y[4,5,6] plt.plot(x,y)ax子图版本 x[1,2,3] y[4,5,6] axplt.subplot() ax.plot(x,y)可以发现&#xff0c;正常情况下是有刻度的&…