VSCode + gdb + gdbserver调试ARM程序

在开发ARM嵌入式端C/C++程序时,一般会在PC上编写代码,在Linux服务器上编译,然后将程序复制或挂载到ARM开发板上运行。如果程序出了问题,在不使用gdb的情况下,经常在代码中添加打印,编译,然后在开发板上再次运行,查看结果。添加打印、编译麻烦费时不谈,想要监视局部变量、断点执行这种方式还不支持。而使用gdb工具时,习惯了使用UI界面的人来说,基本上很难适应。这里将使用VS Code,结合gdb与gdbserver,可视化远程调试arm开发板上的linux C/C++程序。

当然,如果你的应用程序是直接在Linux x86上编译的,且非交叉编译,那么直接在Linux x86上运行即可,无需用gdbserver启动,也无需配置,点击左栏的debug图标即可编译并进入调试模式。
在这里插入图片描述

准备工作

交叉编译好的gdbserver与目标程序test。

使用交叉编译工具链编译要调试的程序,需要注意的是去掉编译选项中的"-O2"或"-O1"选项(某些代码被优化了之后,断点无法生效),并加上"-g"选项,在生成的可执行程序中包含调试信息。

开始调试

将编译好的gdbserver与生成的被调试程序test复制到目标主机中,

进入目标主机,运行如下命令。如果程序带有运行参数,直接依次写在test后面。

./gdbserver localhost:6767 test

端口号可以随意指定,后面填写vscode的配置需要用到,记录下目标主机的ip地址,后面填写配置也要用到。

在打开测试程序源代码工程的VS code窗口中,新建一个launch.json配置。如果已经有了launch.json配置,则直接打开,添加gdb调试配置。

img

img

在launch.json中修改program字段,填写生成的test文件路径。添加"miDebuggerPath"字段,填写刚刚编译生成的gdb路径。添加"miDebuggerServerAddress"字段,填写目标主机的IP与gdbserver监听的端口号。

![img](https://pic2.zhimg.com/80/v2-a0ec41e73856d7e3bf55dff3771fce49_720w.web

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(gdb) Launch", //名称"type": "cppdbg","request": "launch","program": "${workspaceFolder}/xx/test", // 当前目录下编译后的可执行文件"args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}", //表示当前目录"environment": [],"externalConsole": false, // 在vscode自带的终端中运行,不打开外部终端"MIMode": "gdb", //用gdb来debug// "preLaunchTask": "build","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"miDebuggerServerAddress": "10.2.9.108:6767","miDebuggerPath": "/xx/aarch64-linux-gnu-gdb"}]
}

可以添加preLaunchTask,在启动调试前启动其他前置task,例如完成编译。嵌入式的编译往往是多样的,需要自己定义编译task,vscode的默认编译行为可能无法满足。

在文件中打上断点,监视窗口中添加想要监视的变量值,点击运行按钮,即可开始调试过程。

img

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

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

相关文章

SpringCloud 微服务集群升级记录(1.5.x-2.7.18)

前言 前段时间,因项目被扫出大量漏洞,全是因为依赖版本过低,存在高中危漏洞需要升级。正好本来也有规划集群升级,因为工作量大迟迟落实不了,正好有这次修漏洞的机会,升级微服务集群。这篇文章主要记录了本…

Java操作Excel之 POI介绍和入门

POI是Apache 提供的一个开源的Java API,用于操作Microsoft文档格式,如Excel、Word和PowerPoint等。POI是Java中处理Microsoft文档最受欢迎的库。 截至2023/12, 最新版本时 POI 5.2.5。 JDK版本兼容 POI版本JDK版本4.0及之上版本> 1.83.…

【2】PyQt创建窗口

1. 第一个PyQt窗口 from PyQt5.QtWidgets import QApplication,QWidget import sys# 1.创建应用程序 app QApplication(sys.argv)# 2.创建窗口 w QWidget()# 3.显示窗口 w.show()# 4.等待窗口停止 sys.exit(app.exec()) 执行代码,就会显示PyQt窗口: 2. PyQt模块简介 PyQt中…

Java参数验证@Validated

就以登录接口为例&#xff0c;如果用户传参的时候没有传递帐号或者密码&#xff0c;会报错&#xff0c;但是报错的信息不够全面&#xff0c;前端人员不好判断是什么问题&#xff0c;这个时候就需要对参数进行一个校验 引入依赖 <dependency><groupId>org.hibernat…

JAVAEE初阶相关内容第十八弹--网络原理之TCP_IP【续集】

写在前 上一篇博客的重点内容主要讲了关于传输层的TCP协议、UDP协议。 点击跳转上一篇博客 重点介绍了协议的特点、协议端格式、需要重点理解并掌握TCP的工作机制&#xff08;十条&#xff09;。 TCP与UDP对比&#xff1f; TCP用于可靠传输的情况&#xff0c;应用于文件传输&am…

客服系统优化:薪人薪事无代码开发与API连接简化电商平台集成

无代码开发的革新意义 在数字化时代&#xff0c;企业持续寻求提高效率与竞争力的解决方案。无代码开发技术应运而生&#xff0c;为电商平台与客服系统之间的集成提供了全新的可能。薪人薪事通过其先进的无代码开发能力和灵活的API连接&#xff0c;使得电商平台的集成过程变得前…

一. 初识数据结构和算法

数据结构与算法是一个达到高级程序员的敲门砖。当你脱离了语言的应用层面&#xff0c;去思考他的设计层面时&#xff0c;你就依旧已经开始初识数据结构与算法了 数据结构 什么是数据结构 对于数据结构的定义官方并没有统一的解释&#xff0c;在各个百科以及算法的书中&#xf…

类和对象——(7)this指针

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 人生就像骑单车&#xff0c;想保持平衡…

性能测试流程、指标及常见问题!

1.介绍性能测试流程 a.性能需求分析&#xff08;评审&#xff09; 基于接口或者场景&#xff08;全链路&#xff09;的性能测试指标&#xff0c;一般是tps&#xff08;每秒事务数&#xff0c;这里都是通过的事务&#xff09;及art&#xff08;平均响应时间&#xff09; b.了解…

Lombok的踩坑系列之@Builder

背景&#xff1a; Lombok 这个插件大家日常工作中几乎是必备的&#xff0c;几个简单的注解就可以帮助我们减少一大坨get/set方法等&#xff1b;其中Builder注解使用的也很广泛&#xff0c;使用了建造者模式帮助我们构建出个性化的对象&#xff0c;本次踩坑点就在这个地方。 先…

2D与3D图形的基本变换

1. 2d transformations 1.1缩放(Scaling) 其实这个转换非常简单&#xff0c;如图所示就是把x与y进行s倍的缩放&#xff0c;而我们图中的这个矩阵正好满足这一算法。 1.2镜像(Reflection) 这个镜像变换可以和上面的做类比&#xff0c;简单看一下就行。 1.3错切(Shearing) 当然…

【c】16进制数转化为10进制数(计算方法在最后,大家也可以上网搜索视频,视频更详细,谢谢)

#include<stdio.h> #include<math.h> void trans(char arr1[],int arr[],int n) {puts("请输入16进制的数");for(int i0;i<n;i){scanf("%c",&arr1[i]);arr[i](int)arr1[i];}for(int k0;k<n;k){if(arr[k]>65&&arr[k]<7…

大数据技术1:大数据架构设计理论

1、传统数据处理系统存在的问题 随着信息时代互联网技术爆炸式的发展&#xff0c;人们对于网络的依赖程度日渐加深&#xff0c;在业务中需要处理的数据量快速增加&#xff0c;逐渐飙升到了一个惊人的数量级。并且数据产生的速度随着采集与 处理技术的更新仍在加快。 数据量从兆…

C# 雪花算法生成Id工具类

写在前面 传说自然界中并不存在两片完全一样的雪花的&#xff0c;每一片雪花都拥有自己漂亮独特的形状、独一无二&#xff1b;雪花算法也表示生成的ID如雪花般独一无二&#xff0c;该算法源自Twitter。 雪花算法主要用于解决分布式系统的唯一Id生成问题&#xff0c;在生产环境…

装修流程篇

装修流程 https://www.xiaohongshu.com/explore/627ba70d00000000210357b3 https://www.xiaohongshu.com/explore/63b6bc0c000000002203776f 半包装修流程 https://www.xiaohongshu.com/explore/64e5ea3b0000000003021711 户型图 效果 https://www.xiaohongshu.com/ex…

JVM之GC垃圾收集器(六)

GC 垃圾收集器 Java 堆内存被划分为新生代和年老代两部分&#xff0c;新生代主要使用复制和标记-清除垃圾回收算法&#xff1b;年老代主要使用标记-整理垃圾回收算法&#xff0c;因此 java 虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器&#xff0c;JDK1.6 中 Sun …

FluxMQ—2.0.8版本更新内容

FluxMQ—2.0.8版本更新内容 前言 FLuxMQ是一款基于java开发&#xff0c;支持无限设备连接的云原生分布式物联网接入平台。FluxMQ基于Netty开发&#xff0c;底层采用Reactor3反应堆模型&#xff0c;具备低延迟&#xff0c;高吞吐量&#xff0c;千万、亿级别设备连接&#xff1…

调试GMS应用,报错“此设备未获得play保护机制认证”问题解决

不少同学在调试GMS相关应用时&#xff0c;需登录Google账号&#xff0c;有时会弹出如下通知。 Google登录界面也会出现如下提示 这个报错的原因是设备未通过Google认证&#xff0c;google服务器未配置荣耀设备的型号白名单导致 国内网页有一些指导方法在鸿蒙\荣耀的设备上消除这…

07、pytest指定要运行哪些用例

官方用例 # 目录结构 | |----test_mod.py | |----testing||----test_dir.py# content of test_mod.py import pytestdef func(x):return x 1def test_mod():print("test_mod function was invoked")assert func(3) 5def test_func():print("test_func was in…

【机器学习】聚类(三):原型聚类:高斯混合聚类

文章目录 一、实验介绍1. 算法流程2. 算法解释3. 算法特点4. 应用场景5. 注意事项 二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 导入必要的库1. 全局调试变量2. 调试函数3. 高斯密度函数&#xff08;phi&#xff09;4. E步&#xff08;getExpectation&#xff09…