嵌入式VSCode+gdbserver图形化调试环境搭建与使用

2023-11-11

目录

一、原理

二、环境搭建

1、VSCode设置

2、gdbserver安装

三、调试过程


一、原理

嵌入式系统中一般在 PC端运行 gdb工具,源码也是在 PC端,源码对应的可执行文件放到开发板中运行。为此我们需要在开发板中运行 gdbserver,通过网络与 PC端的 gdb进行通信。因此要想在 PC上通过 gdb调试嵌入式程序,那么需要两个东西:gdb和gdbserver,其中 gdb是运行在 PC上的, gdbserver需要我们移植到开发板上。

二、环境搭建

1、VSCode设置

1、给 VScode安装远程调试插件“ Remote Development”,点击“调试 ”->“打开配置”,然后选择“ C++(GDB/LLDB)”选项,然后会在 .vscode文件夹下生成launch.json文件

需要修改的内容:

①、name:调试的项目名

②、program:需要调试的应用程序可执行文件路径。

③、cwd:需要调试的应用程序源码路径。

④、miDebuggerPath:此项需要手动添加,用于指定所使用的交叉编译器 gdb路径。

⑤、miDebuggerServerAddress:此项需要手动添加,远程 gdbserver服务器地址,也就是开发板地址

修改后的launch.json文件如下,注意这些内容要根据自己的情况来修改,仅供参考!!

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gdbtest",
            "type": "cppdbg",
            "request": "launch",
            "program": "/home/denghengli/linux/IMX6ULL/linux_driver/0_gdbtest/gdbtest",
            "args": [],
            "stopAtEntry": false,
            "cwd": "/home/denghengli/linux/IMX6ULL/linux_driver/0_gdbtest",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "miDebuggerPath":"/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb",
            "miDebuggerServerAddress":"192.168.0.20:2000"
        }
    ]
}

2、gdbserver安装

一般交叉编译已经自带了 gdb和 gdbserver,可以不用移植,直接使用交叉编译器自带的即可,直接将gdbserver拷贝到根文件系统的 /usr/bin 目录下,开发板启动以后通过nfs服务使用ubuntu下的跟文件系统;如果交叉编译器没有自带则需要下载源码进行安装

1、交叉编译器自带

gdbserver的安装目录:

将gdbserver拷贝到rootfs根文件系统 /usr/bin 中:

sudo cp /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/gdbserver /home/denghengli/linux/nfs/rootfs/usr/bin/

2、源码下载安装步骤

我没有用源码安装过,所以就略过了吧。。。

三、调试过程

1、将源码编译成带调试信息的可执行文件,然后拷贝到开发板上。比如在ubuntu下编写了一个gdbtest.c文件,编译完成以后将得到的gdbtest可执行文件发送到开发板中

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
	unsigned int times = 0;

	while (1)
	{
		printf("runging times: %d \r\n", times);
		times++;
		sleep(1);
	}
}

编译:

arm-linux-gnueabihf-gcc gdbtest.c -o gdbtest -g //编译测试程序,注意 -g选项

拷贝至rootfs根文件系统下(开发板启动以后通过nfs服务使用ubuntu下的跟文件系统):

sudo cp gdbtest /home/denghengli/linux/nfs/rootfs/lib/modules/4.1.15/

2、在开发板中,启动gdbserver并执行要调试的执行文件

gdbserver 192.168.0.107:2000 gdbtest //启动开发板上的 gdbserver

192.168.0.107为指定的ubuntu主机ip

2000为要开启调试的端口

gdbtest为调试的可执行文件,一定要带上gdbtest的路径!!

3、点击 VSCode上的“调试” ”->“启动调试”按钮开启调试

4、控制程序运行

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式VSCode+gdbserver图形化调试环境搭建与使用 的相关文章

  • 实践理解 Transactional 是否生效

    实践理解 Transactional 是否生效 示例 新建一个订单表 tb order test 手动插入一条数据 然后在代码中 根据 id 更新 如果更新成功 那么 update time 会变化 代码中执行 1 0 由于 0不能做为除数
  • 【论文解读】PHMLD_Wei-Ting Chen_TIP2020

    问题提出 Related Works 随着学习技术的发展 已经提出了几种基于合成数据的除雾算法 唐等 7 使用随机森林计算每个补丁的传输值 蔡等 8 基于称为DehazeNet的端到端系统 预测了每个补丁的传输值 任等人 9 提出了MSCN
  • [C#]BeforeFieldInit 与类静态构造函数

    BeforeFieldInit 与类静态构造函数 罗朝辉 http kesalin cnblogs com 本文遵循 署名 非商业用途 保持一致 创作公用协议 如下代码 using System namespace BeforeFieldI
  • js识别当前设备是pc端

    项目开发中很多时候会遇到要求系统既要在pc中运行也可以在手机上访问的需求 这是时候就需要判断一下系统运行的平台来做页面适配 在main js中添加如下代码 function identifyDevicePlatform var os fun
  • linux中head方法单独取一行,linux head tail sed用法

    一 head 语法 head n k file 显示前10行 1 head 10 file txt 2 head n 10 file txt 3 head n 10 file txt 除最后k行 显示其它所有 head n 10 file
  • Nginx http_try_files_module precontent阶段 try_files指令

    http try files module http try files module 模块只提供了try files这一个指令 该模块对于我们使用反向代理的时候有很大的帮助 该模块是默认编译进nginx框架当中的 无法将其取消 在搭建wo
  • ExecutorService配置线程池对象、日程线程池对象和基本使用示例

    线程池是高级开发必备的技能之一 线程池在实际开发中使用频率非常高非常重要 这里介绍一下线程池的基本使用方法 一 频繁的创建线程有什么缺点 1 经常创建和销毁线程会消耗非常大的资源 例如并发情况下的线程 对性能影响很大 二 使用线程池的思路
  • 【JAVA】接口与多态

    接口 定义 接口用关键字interface定义 public interface 接口名 特点 接口不能实例化 创建对象 接口和类之间是实现关系 通过implements关键字表示 public class 类名 implements 接口
  • 快递项目——手写MVC实现快递后台和平台

    目录 编写流程 管理员的登陆 快递管理 子模块 编写的流程 标准流程 api文档 用户的管理 子模块 快递员管理 子模块 控制台显示 实体类 MVC Util工具类 微信包 配置文件 补充 ngrok内网穿透 问题汇总 编写流程 管理员的登
  • 汇编语言——串操作指令

    若要处理连续内存单元中的一批数据 通常需要借助于循环 80x86CPU提供了一组串操作指令 可用来处理内存中的数据 字节 字 双字 串 这些指令包括MOVS LODS STOS SCAS CMPS 为了指出操作对象的长度 在助记符后加上B
  • 下载的文件被Windows 11 安全中心自动删除

    今天从CSDN上下载了自己曾经上传的文件 但是浏览器下载完之后文件被Windows安全中心自动删除 说是带病毒 实际是没有病毒的 再说了即便有病毒也不应该直接删除啊 至少给用户一个保留或删除的选项 研究了一番 可以暂时关闭安全中心的实时保护
  • 基于UDP实现简易聊天

    概述 UDP没有创建连接 数据包是一次收发一个 没有流的概念 但是在UDP编程中需要用到的是Socket 因为应用程序在使用UDP时必须指定网络接口 IP地址 和端口号 服务器端 在服务器端 使用UDP也需要监听指定的端口 Java提供了D
  • OTSU算法 (大津算法)理解&代码

    OTSU算法 对图像进行二值化的算法 介绍 OTSU算法是一种自适应的阈值确定的方法 又称大津阈值分割法 是最小二乘法意义下的最优分割 它是按图像的灰度特性 将图像分成背景和前景两部分 因方差是灰度分布均匀性的一种度量 背景和前景之间的类间
  • SpringBoot的yml文件中map,对象,list的嵌套使用

    ems ems real ip map 127 0 0 110 Huawei NCE OTN 127 0 0 33 Huawei NCE ROADM ems collect config map Huawei NCE OTN host 12
  • PTA 求最大、次大和第3大的值 (25 分)

    本题目要求读入n个整数 要求用最少的比较次数 输出它们的最大值 第2大的值和第3大的值 例如 对于13 13 1 10 34 10这6个数 最大值为34 第2大的值为13 第3大的值为10 输入格式 输入有两行 第一行为整数个数n 1 00
  • Redis多数据中心复制管理系统—— X-Pipe

    Redis多数据中心复制管理系统 X Pipe Redis 在携程内部得到了广泛的使用 根据客户端数据统计 整个携程全部 Redis 的读写请求在每秒 200W 其中写请求约 10W 很多业务甚至会将 Redis 当成内存数据库使用 这样
  • 基于51单片机实现继电器控制照明设备(Proteus仿真)

    wechat 嵌入式工程师成长日记 具体功能实现 当按下开关时 继电器闭合点亮照明设备 灯泡 使用器件 照明设备 LAMP 按键 AT89C51 若干电阻 PNP晶体管 二极管 继电器 RTE24005F Proteus仿真原理图 仿真 知
  • C++字符串【string】和【char []】操作全攻略

    异想之旅 本人原创博客完全手敲 绝对非搬运 全网不可能有重复 本人无团队 仅为技术爱好者进行分享 所有内容不牵扯广告 本人所有文章仅在CSDN 掘金和个人博客 一定是异想之旅域名 发布 除此之外全部是盗文 一 char 类型 1 定义与输入
  • Linux_18.04 Failed to load module "canberra-gtk-module"

    解决办法 sudo apt install libcanberra gtk module

随机推荐

  • openGL之API学习(二十六)glTexImage2D

    给2维纹理分配显存空间 也可以从内存向显存拷贝数据 void glTexImage2D GLenum target GLint level GLint internalformat GLsizei width GLsizei height
  • 你需要知道的 Selenium4 新特性

    前言 最近又用到了Selneium 发现已经来到了 4 9 版本了 本篇文章来介绍下它较比 Selenium3 的一些新特性 记录下 当是做笔记了 最令人惊喜的是 Selenium4 会自动回收浏览器资源 本文所使用的 Selenium 版
  • linux常用命令及解释大全(一)

    目录 一 系统信息 二 关机 重启及登出 三 文件和目录 3 1 导航命令 3 2 查看命令 3 3 创建和删除命令 3 4 复制和链接命令 3 5 其他命令 四 文件搜索 五 挂载文件系统 六 磁盘空间 七 用户和群组 总结 前言 Lin
  • js 拦截alert对话框

  • 若依框架前后端分离版——导入功能

    引言 主要是记录自己使用若依框架并增加其导入功能的实现过程 前端部分 在相应的index vue中添加以下代码 1 数据导入的按钮 v hasPermi 是权限相关的配置
  • Git版本回退并提交远程

    1 进入远程git 在提交纪录中找到需要回退的版本 复制版本号 2 终端进入项目 并执行git reset hard 23a50a1fXXX41XXXXX0227 3 把修改推送至远程 执行已下指令 git push f u origin
  • thrift开发问题总结

    作为目前最流行的RPC框架 thrift不仅提供了通信协议 同时提供了网络框架 解脱了程序员的生产力 thrift也是阿帕奇Hadoop系列的RPC实现工具 本文主要聚焦在实现的thrift系统中 遇到的各种问题 但是thrift在隐藏一些
  • matlab 矩阵增加行,MATLAB 中 如何在矩阵中插入1行

    点击查看MATLAB 中 如何在矩阵中插入1行具体信息 答 举例来说吧假如你已有矩阵A如下 A 2 3 5 3 4 1 0 9 7 这是一个3 3矩阵 那么当你想插入一行r 1 2 3 时 那么可以这样做 A A r 这样A就变成了4 3的
  • Gin框架(学习笔记)

    目录 学习地址 gin 路由 routes group gin 中间件 Cookie 重定向 同步异步 日志文件 学习地址 https www topgoer com gin E6 A1 86 E6 9E B6 gin 路由 package
  • windows操作系统蓝屏错误对照表

    windows操作系统蓝屏错误对照表
  • 出行行业计价模块的设计模式实践

    业务场景介绍 在出行行业中 价格的配置随随着业务的增加而增加 而刺激出行的促销活动更是频繁 在价格的计算中 通常的流程如下 根据一组价格配置 计算订单基础的价格 根据用户拥有的优惠对象 例如优惠券 积分 会员级别等 计算出优惠以后的价格 计
  • 信号和槽机制

    1 信号和槽机制概念 信号 各种事件 槽 响应信号的动作 当某个事件发生后 如某个按钮被点击了一下 它就会发出一个被点击的信号 signal 某个对象接收到这个信号之后 就会做一些相关的处理动作 称为槽slot 但是Qt对象不会无故收到某个
  • pyqt5 一些界面色彩搭配的建议(RGB值)

    简约现代风格 底色 浅灰色 240 240 240 按钮控件颜色 中蓝色 0 122 255 文字框颜色 白色 255 255 255 字体颜色 深灰色 51 51 51 点击时的颜色 深蓝色 0 80 180 清新自然风格 底色 浅绿色
  • React中styled-components的使用(样式组件库)

    一 官网地址 https www styled components com 二 styled components 1 styled components 样式化组件 主要作用是它可以编写实际的CSS代码来设计组件样式 也不需要组件和样式
  • React项目路由懒加载lazy、Suspense,使第一次打开项目页面变快

    一次性加载太多的路由文件会使首次加载的速度很慢 所以我们需要将路由搞成懒加载的形式 用到哪个组件加载哪个组件 庆幸的是React官方已经给我们准备好了插件 也在React库中 首先 从react这个库中导出lazy Suspense这两个方
  • mysql数据库的内部结构说明

    记住 表才是存放数据的基本单元 结论 Mysql数据底层由多个database组成 每一个database存放多张表
  • 【记录】在NAS上部署git文章汇总(网址)

    1 https blog csdn net mtclz3 article details 87461470 2 https blog csdn net u014213012 article details 65631261 3 https
  • git常用操作命令总结

    本篇文章主要收集记录git常用命令
  • Keil编程中Source Brower : "P17" is undefined!的问题

    博客原文 Keil编程中Source Brower P17 is undefined 的问题 在Keil新建工程中经常会遇到一个问题 去看某一个变量定义 然后跳转不过去 并提示Source Brower 某某 is undefined 在这
  • 嵌入式VSCode+gdbserver图形化调试环境搭建与使用

    目录 一 原理 二 环境搭建 1 VSCode设置 2 gdbserver安装 三 调试过程 一 原理 嵌入式系统中一般在 PC端运行 gdb工具 源码也是在 PC端 源码对应的可执行文件放到开发板中运行 为此我们需要在开发板中运行 gdb