百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

在VSCODE 中使用GDB+串口进行调试嵌入式程序

bigegpt 2024-08-11 14:29 12 浏览

对于嵌入工Linux类的应用程序,由于设备的硬件资源有限,没有像单片机类调试接口也无法在其上面安装完整的开发环境,所以无法直接像本地电脑一样调试应用程序。当需要排查设备问题时,最常用的方法是抓取设备LOG进行分析,效率比较低下,这时候可以使用远程GDB调试,它可以实现对程序的实时监控和调试,并帮我们快速定位问题。

远程GDB调试有两种方式,第一种方式是通过SSH连接调试,需要网络支持,另外一种就是本文介绍的通过串口调试,主要分以下几步进行。

  1. 编译GDB Server
  2. 应用程序配置
  3. vscode配置
  4. 启动应用及调试

编译GDB Server

GDB Server需要在目标机上运行,这需要交叉编译器编译出来,如果不知道怎么编译的可以自行百度,不过交叉编译器的目录中一般都会带有,直接复制到目标板即可,所在的目录如下:

{编译目器目录}/arm-linux-gnu/libc/usr/lib/bin/gdbserver

一种简单方法是直接编译器目录搜索出来

应用程序配置

应用程序配置包含编译选项,在makefile中添加-g选项,优化选项最好选择为o0

CFLAGS += -O0 
CFLAGS += -g 

vscode配置

在.vscode目录下新建launch.json文件,记得先安装c/c++插件

{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "(gdb) Launch",
        "type": "cppdbg",
        "request": "launch",
        "program": "${workspaceFolder}/app",
        "args": [],
        "stopAtEntry": true,
        "cwd": "${workspaceFolder}",
        "environment": [],
        "externalConsole": false,
        "MIMode": "gdb",
        "setupCommands": [
          {
            "description": "Enable pretty-printing for gdb",
            "text": "-enable-pretty-printing",
            "ignoreFailures": true
          },
          {
            "description": "set root",
            "text": "set sysroot ../buildroot/buildroot/output/host/mipsel-buildroot-linux-gnu/sysroot",
            "ignoreFailures": true,                
            },     
        ],
        "miDebuggerPath":"../arm-linux-gcc/bin/mips-linux-gnu-gdb",
        "miDebuggerArgs": "-b 460800 ${workspaceFolder}/app",
        "miDebuggerServerAddress": "/dev/ttyCH341USB0",
      }
    ]
}

其中以下几项需要特别注意:

指定APP程序路径

"program": "${workspaceFolder}/app":调试的APP名称

"cwd": "${workspaceFolder}":工作目录

指定本地符号库

调试程序过程中,GDB需要加载APP用到的动态库到本地,这些动态库都放到了板子上usr/lib下,由于使用的是串口通信,波特率慢,加载过程会非常久。为了解决这个问题,可以通过发送set sysroot命令给GDB指定加载本地编译好的库,如果你使用的是buildroot构建的程序,库的路径存放在..-buildroot-linux-gnu/sysroot中,如下所示在setupCommands表中添加一个命令,这可以在启动GDB前执行。

{
    "description": "set root",
    "text": "set sysroot ../buildroot/buildroot/output/host/arm-buildroot-linux-gnu/sysroot",
    "ignoreFailures": true,                
},

指定GDB的路径

直接使用交叉编译的GDB即可

"miDebuggerPath":"../arm-linux-gcc/bin/mips-linux-gnu-gdb",

指定服务器地址

如果使用的是SSH进行调试,则地址写IP和端口,如果使用的是串口,则写的是连接到主机端的串口号(串口接入LINUX后记得加777权限)。

"miDebuggerServerAddress": "/dev/ttyCH341USB0",

指定启动参数

GDB启动参数通常写的是APP名称,不过对于串口来说还需要指定通信波特率,如下所示,指定了460800波特率,这个越高越好,除此之外,板子上也得设置一样的波特率

miDebuggerArgs": "-b 460800 ${workspaceFolder}/app

到这里为止,VSCODE的配置基本算完毕了。

启动应用调试

下一步就是启动程序跟调试了,需要先将GDB Server跟APP都复制到板子上,并运行起来。

目标串口配置

启动应用前,需要先前板子上的串口波特率配置跟主机一样,如下所示通过stty命令更改波特率,这里我使用的是串口5进行调试的。

stty -F /dev/ttyS5 speed 460800 \r\n

启动应用

接着使用GDB Server启动应用程序,通常命令如下:

gdbserver --remote-debug /dev/ttyS5 app &

/dev/ttySx:用于DEBUG的串口号,非板子终端打印的用的串口,这意味差需要两个串口才行

app:待调试的应用程序

启动调试

完成上面所有操作之后,就可以开始调试的,点击VSCODE左侧边栏的三角符号按钮(Run and Debug),下拉选择C/c++调试,此时板子终端上会打印一系列的消息出来表示已经通信上了,可以点击运行,打断点之类的操作,不过由于使用串口的原因,操作起来比较慢。

常见问题

1.暂停之后复位应用程序无响应,解决办法在本地将gdbserver --remote-debug /dev/ttyS5 杀掉重新来。

相关推荐

5分钟调色大片的方法(5分钟调色大片的方法有哪些)

哈喽大家好。在大家印象中一定觉得ps非常难学非常难。大家不要着急,小编的教学都是针对ps零基础的同学的,而且非常实用哦。只要大家跟着图文练习一两遍,保证大家立马学会~!好了,废话少说,下面开始我们今天...

闪白特效原来是这么用的(闪白特效怎么使用)

作者|高艳侠订阅|010-86092062闪白特效是影视作品中应用比较多的效果之一,那么具体该在哪些场景使用闪白特效?具体该如何操作?下面就以AdobePremiere(以下简称PR)为例,...

ppt常用小图标去哪里找?3个矢量素材网站推荐!

ppt是一个注重可视化表达的演示载体,除了高清图片,ppt中另一类常用的素材是各种小图标,也叫矢量图标,巧妙运用小图标能提升整体美观度和表现力,那么ppt常用小图标去哪里找呢?为方便各位快速找到合适的...

有什么好用的截图录屏工具?试试这9款

经常有朋友反馈苦于缺乏截屏和录屏的趁手工具,本期我们分享几个相当好用的截屏和录屏工具,希望能帮到大家。ScreenToGifScreenToGif是一款免费且开源的录屏工具。此款工具最大的特点是可以...

配色苦手福音!专业快速色环配色PS插件

今天橘子老师给的大家介绍的是一款快速配色的插件,非常强大配色苦手福音来啦!(获取方式见文末)【插件介绍】配色在后期设计中占有主导地位,好的配色能让作品更加抢眼Coolorus这款专业的配色插件,能够...

如何用PS抠主体?(ps怎么抠主体)

1.主体法抠图-抠花苞和花梗导入一张荷花苞的照片,点击上图中顶部“选择”菜单栏,下拉单击“主体”。可以看到,只有花苞被选中,但是花梗并没有被选中。接下来单击上图中左侧工具栏的“快速选择工具”,上图中顶...

2799元的4K电视,有保障吗?(买4k电视机哪个品牌好)

在上一期《电脑报》的3·15专题报道中,我们揭露了一款不靠谱的42英寸4K智能电视——TCLD42A561U。这款售价2699元的4K智能电视不仅4K画质方面存在严重问题,而且各种功能和应用体验也不理...

苹果电脑的Touch Bar推出一段时间了 这款工具可以帮你开发适用于它的APP

距离苹果推出带有TouchBar的MacBookPro已经有一段时间了,除了那些像Adobe、Google和Microsoft大公司在开发适用于TouchBar的应用之外,其实还有很多独立的开...

如魔法般吸取颜色的桌灯(如魔法般吸取颜色的桌灯叫什么)

色彩为生活带来的感官刺激,逐渐被视为理所当然。一盏桌灯运用它的神奇力量,将隐藏于物件中的颜色逐一释放,成为装点环境的空间魔法师。ColorUp是一款可以改变颜色的吸色台灯,沿用传统灯泡的造型,融入了拾...

一篇文章带你用jquery mobile设计颜色拾取器

【一、项目背景】现实生活中,我们经常会遇到配色的问题,这个时候去百度一下RGB表。而RGB表只提供相对于的颜色的RGB值而没有可以验证的模块。我们可以通过jquerymobile去设计颜色的拾取器...

ps拾色器快捷键是什么?(ps2019拾色器快捷键)

ps拾色器快捷键是什么?文章末尾有获取方式,按照以下步骤就能自动获得!学会制作PS特效需要一定程度的耐心和毅力。初学者可以从基本的工具和技术开始学习,逐渐提高他们的技能水平。同时,观看更多优秀的特效作...

免费开源的 Windows 截图录屏工具,支持 OCR 识别和滚动截图等

功能很强大、安装很小巧的免费截图、录屏工具,提供很多使用的工具来帮我么能解决问题,推荐给大家。关于ShareXShareX是一款免费的windows工具,起初是一个小巧的截图工具,经过多年的迭...

入门到精通系列PS教程:第13篇 · 拾色器、颜色问题说明及补充

入门到精通系列PS教程:第13篇·拾色器、颜色问题说明及补充作者|侯潇问题说明我的第12篇教程里,有个小问题没有说清楚。要说是错误,又不算是错误,只是没有说准确。写完那篇教程后,因为已经到了深...

PS冷知识:用吸管工具吸取屏幕上的任意颜色

今天,我们给大家介绍PS中的一个冷知识:用吸管工具可以吸取屏幕上的任意颜色。其实,操作起来是非常简单的。大多数情况下,我们认为,PS的吸管工具只能吸取PS软件作图区域范围内的颜色,最多加上画布四周的...

Windows 11 将提供内置颜色选择器工具

Windows11内置了颜色选择器,可以扫描并识别屏幕上的颜色并生成颜色代码。此外,微软还利用人工智能技术,让屏幕上的文本扫描和选择变得更加便捷。这两项功能均已在SnippingToolv1...