VSCode远程调试linux

news2024/10/6 18:34:40

文章目录

  • 前言
  • 1. 给从机安装GCC与GDB
  • 2. 编写测试 .c文件
  • 3. 本地编译生成可执行文件
  • 4. VSCode配置
    • 4.1 拓展安装
    • 4.2 ssh连接与配置
    • 4.3 配置debug
  • 5. 开启调试

前言

这个调试是基于迅为itop3568板子进行调试的,如果你的不是这个板子,其实其他的也差不多流程。
这里从机3568下载好GCC和GDB之后,通过指令进行编译并生成可执行文件。因为linux中进行调试确实不太方便,没有windows下的工具那么舒服,所以这里用VScode进行远程调试。

这里是交差编译的一种方式,就是从机编译和生成可执行文件,然后主机进行调试。

还有另一种交叉编译的方式是,主机用基于从机的交差编译链条工具进行编译和生成可执行文件,把可执行文件直接放到从机去,然后在用远程调试的方式进行。这个相关教程,我后面自己弄通了测试无误后再发一个博客。


1. 给从机安装GCC与GDB

3568板子官方给的linux镜像是自带gcc的版本是

gcc version 7.5.0(Ubuntu/Linaro 7.5.0-3ubuntu1~18.04)

没有安装gdb调试,gdb调试工具链需要安装。通过对比查看官方虚拟机Ubuntu的交叉编译工具链,

gdb的版本即为最新gdb,所以只需要通过指令apt-get install gdb即可获得。

安装完成后通过gdb -v查看版本为:GNU gdb (Ubuntu 8.1.1-0ubuntu1)8.1.1

安装的位置可以通过whereis gdb指令进行获取

2. 编写测试 .c文件

/home/topeet/下创建文件夹,VscodeGdbTest文件夹下创建main.c

通过vim进行输入代码,代码如下:

#include<stdio.h>
int main()
{
    printf("This is a test demo\n");
    int i=10;
    while (i--)
    {
        printf("number of i is %d\n",i);
    }
    return 0;
}

3. 本地编译生成可执行文件

打开终端进入到main.c的目录下,通过指令

g++ -g main.c gdb -o arm_test

将文件的main.c进行编译,同时用gdb生成可执行文件,可执行文件的名字为arm_test

4. VSCode配置

4.1 拓展安装

​ (1)安装remote-ssh

​ (2)安装c/c++

​ (3)安装gdb debug

4.2 ssh连接与配置

在这里插入图片描述在这里插入图片描述

上图输入ssh topeet@192.168.0.108,这里的格式是ssh+用户名@+从机ip,具体主机具体ip自己对应着输。

配置选择第一个:ssh configuration file

右下角的小提示框选择connect

接着在左侧一栏就会出现我们已经配置好的ssh,右键我们配置好的从机,选择打开(当前窗口/新窗口)

打开后要输入密码,密码是用户名对应的用户密码,输入正确后就会连接上linux从机,单击左侧第一个则可以选择打开对应目录的文件。这时候还需要输入密码,密码依然为用户密码。

4.3 配置debug

点击左侧一栏的run and debug,接着点击create a launch.json file

下面代码进行替换

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: Debugging in Visual Studio Code
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动", //配置名称,显示在配置下拉菜单中
            "type": "cppdbg", //配置类型
            "request": "launch", //请求配置类型,可以是启动或者是附加
            "program": "/home/topeet/vscode_gdb/arm_test", // linux上程序可执行文件的完整路径         
            "args": [], //传递给程序的命令行参数
            "stopAtEntry": false,//可选参数,如果为true,调试程序应该在入口(main)处停止
            "cwd": "${workspaceFolder}", //目标的工作目录
            "environment": [], //表示要预设的环境变量
            "externalConsole": false,//如果为true,则为调试对象启动控制台
            "MIMode": "gdb",//要连接到的控制台启动程序
            "setupCommands": [ //为了安装基础调试程序而执行的一个或多个GDB/LLDB命令
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "miDebuggerPath": "/user/bin/gdb", // linux上gdb的位置

// gdb程序路径,作为与目标板gdbserver通信的gdb client运行于linux服务器上
            "miDebuggerServerAddress": "192.168.0.108:9001"  //目标板上gdbserver监听的IP地址和 // 端口号      
        }
    ]
}

这里program、miDebuggerPath、miDebuggerServerAddress需要重新设定。

program:对应刚才从机生成的可执行文件的路径

miDebuggerPath:linux中安装gdb的位置

miDebuggerServerAddress:从机中监听gdbserver的IP和端口号

5. 开启调试

在从机linux端控制台输入如下指令,开启服务:

gdbserver :9001 arm_test

接着在VSCode端设置断点进行调试

程序的输出会在从机上显示。
参考博客:VScode远程调试

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

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

相关文章

什么是瀑布流布局?瀑布流式布局的优缺点

瀑布流又称瀑布流式布局&#xff0c;是一种多列等宽不等高的一种页面布局方式。 视觉表现为参差不齐的多栏布局。随着页面滚动条向下滚动&#xff0c;这种布局会不断加载数据并附加至当前的尾部。 是一种多列等宽不等高的一种页面布局方式&#xff0c;用于图片比较复杂&#…

Python每日一练(20230415)

目录 1. 路径总和 II &#x1f31f;&#x1f31f; 2. 两数相除 &#x1f31f;&#x1f31f; 3. 不同的二叉搜索树 II &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日…

基于小波分解+深度信念网络DBN的脑电信号分类识别

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) DBN的脑电信号分类识别 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,本文用DBN提取特征,用SVM分类,实现二者长处互补 DBN神…

docker在mac-m1芯片部署并启用tomcat

手把手教你使用docker在mac-m1芯片部署并启用tomcat 1&#xff0c;下载docker并安装 登陆官网下载dockr&#xff0c;选择mi芯片的docker下载 下载地址&#xff1a;https://www.docker.com/get-started 2&#xff0c;配置docker的阿里云加速器&#xff08;也可以配置其他加速…

Java_Mybatis:1. 框架概述

目录 1 什么是框架 1.1 框架的概念 1.2 框架要解决的问题 1.3 软件开发的分层重要性 1.4 分层开发下的常见框架 1.5 MyBatis 框架概述 2 JDBC 编程的分析 2.1 jdbc 程序的回顾 2.2 jdbc 问题分析 1 什么是框架 1.1 框架的概念 应用方面&#xff1a;框架&#xff08;Fra…

https://app.hackthebox.com/machines/Squashed

https://app.hackthebox.com/machines/Squashed info collecting ┌──(kwkl㉿kwkl)-[~] └─$ sudo nmap -A 10.10.11.191 -T4 …

吴 军:ChatGPT不算新技术革命,带不来什么新机会

来源: 學人Scholar 吴军&#xff0c;1967年出生&#xff0c;毕业于清华大学和约翰霍普金斯大学&#xff0c;计算机专业博士&#xff0c;前Google高级资深研究员、原腾讯副总裁、硅谷风险投资人。 4月3日晚上&#xff0c;得到直播间邀请到了计算机科学家、自然语言模型专家吴军&…

Docker安装Elasticsearch详细步骤

1 安装elasticsearch 1.1 拉取镜像 docker pull elasticsearch:7.12.11.2 创建挂载目录 mkdir -p /app/elasticsearch/confecho "http.host: 0.0.0.0" >> /app/elasticsearch/conf/elasticsearch.ymlmkdir -p /app/elasticsearch/datamkdir -p /app/elastic…

pyest+appium实现APP自动化测试,思路全总结在这里

目录 01、appium环境搭建 2、搭建pythonpytestappium环境 3、安装pycharm搭建项目编写脚本 4、执行测试 绵薄之力 01、appium环境搭建 安装nodejs http://nodejs.cn/ 为什么要安装nodejs&#xff1f; 因为appium这个工具的服务端是由nodejs语言开发的 安装jdk&#xff…

Lambda表达式的使用和省略模式

Lambda表达式的使用和省略模式一、 Lambda表达式使用1、 Lambda格式2、演示demo&#xff1a;线程启动&#xff0c;底下分别是三种实现方式3、 Lambda使用的前提4、Lambda表达式的几种类型二、省略模式1、 几种可以省略的场景2、 注意事项一、 Lambda表达式使用 1、 Lambda格式…

两种方式对el-table二次封装

1、序言 完整源码&#xff1a;el-table-example: 两种方式对el-table二次封装 最近在公司写了好多的后台管理系统&#xff0c;管理系统很大部分都是elementui下的el-table&#xff0c;el-table中有很多 <el-table-column></el-table-column>是重复的&#xff0c;像…

Redis_概述_特性_IO模型

本章要点 掌握NoSql数据库的概念和与sql数据库的区别初步了解Redis内存数据库了解Redis内存数据库的优点及其原因掌握Redis的多线程IO模型学习Redis的安装和配置 Redis简介 Redis 全称 Remote Dictionary Server 远程字典服务! 使用C语言编写,支持网络,可基于内存也可以持久化…

Scrapy爬虫框架(概念)

Scrapy 入门教程 | 菜鸟教程 (runoob.com) Scrapy是一个快速功能强大的网络爬虫框架 Scrapy的安装 通过 pip 安装 Scrapy 框架: pip install Scrapy 安装后小测&#xff1a; 执行 scrapy ‐h Scrapy不是一个函数功能库&#xff0c;而是一个爬虫框架。 Scrapy架构图(绿线是…

【ROS2指南-4】理解ROS2话题

目标&#xff1a;使用 rqt_graph 和命令行工具来反思 ROS 2 主题。 教程级别&#xff1a;初学者 时间&#xff1a; 20分钟 内容 背景 先决条件 任务 1 设置 2 rqt_graph 3 ros2主题列表 4 ros2主题回显 5 ros2 主题信息 6 ros2界面展示 7 ros2主题发布 8 ros2 主题赫…

光纤能取代网线吗?

光纤与铜缆之间的较量已持续了十多年。现如今随着云计算、5G 等新型业务的不断涌现&#xff0c;数据中心规模不断的扩大&#xff0c;其架构与布线也越来越复杂&#xff0c;而光纤的轻量化及逐渐降低的成本&#xff0c;使得主干网设备对光纤的需求也越来越旺盛&#xff0c;在大型…

pikachu靶场-xss

XSS漏洞攻击原理跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中Web里面的Script代码会被执行&#xff0c;从而达到恶意攻击用户的目的。一般XSS可以分为如下几种常见类型&#xff1a;1.反射性XSS;2.存储型XSS;3.…

成为钢铁侠!只需一块RTX3090,微软开源贾维斯(J.A.R.V.I.S.)人工智能AI助理系统

梦想照进现实&#xff0c;微软果然不愧是微软&#xff0c;开源了贾维斯(J.A.R.V.I.S.)人工智能助理系统&#xff0c;贾维斯(jarvis)全称为Just A Rather Very Intelligent System&#xff08;只是一个相当聪明的人工智能系统&#xff09;&#xff0c;它可以帮助钢铁侠托尼斯塔克…

何为智能驾驶的「摩尔定律」?这家芯片方案商给出自己的答案

“我觉得&#xff08;高速NOA&#xff09;价格下降的速度可能会是非常快的&#xff0c;”4月6日&#xff0c;地平线技术开放日上&#xff0c;地平线副总裁、软件平台产品线总裁余轶南在与高工智能汽车沟通中称&#xff0c;“到2024年底&#xff0c;约100TOPS的高速NOA&#xff…

Lottie加载的一些坑

Lottie是一个非常强大的动画库&#xff0c;可以渲染一些非常绚丽的动画。然而在使用的过程中&#xff0c;会遇到一些诡异的问题。通常&#xff0c;这不是使用方式上有什么问题&#xff0c;大都是UE产出的lottie本身存在问题。本来之前的UE小哥还不错的&#xff0c;跳槽后来了个…

【详解 进程通信】之 System V 共享内存

简介大致操作步骤介绍结果展示key值的获取创建 | 获取共享内存使用共享内存段解除共享内存段销毁共享内存段&#xff08;重点&#xff09;命令行方式销毁共享内存段系统调用销毁共享内存使用共享内存进行进程间通信简介 共享内存可以让多个进程共享同一块内存&#xff0c;也就…