首页 > 其他分享 >GDB调试入门(一)

GDB调试入门(一)

时间:2023-09-28 18:04:00浏览次数:40  
标签:core 入门 查看 GDB 简写 断点 调试

GDB调试入门(一)

嵌入式er 嵌入式er 终极理想稚晖君  

当代码量较多时,使用GDB调试代码可以相对便捷的定位错误点,提高Dbug效率。
首先先熟悉下GDB调试的基本流程:
1. 在编译代码是添加 gcc添加–g选项
:gcc -g test.c -o test.out
2. 然后在bash环境中使用GDB 命令调用编译生成程序:
:gdb ./test.out
进入调试页面

在这个界面下我们可以通过一些GDB的常用命令进行代码的细节调试,常用命令如下:
运行该程序:run(简写r)
查看代码:list(简写l)
打断点:break(简写b)后跟行号(或者函数名、文件名:行号)
查看所有断点:info break
跳转到下一断点处:continue(简写c)
删除断点:delete(简写d)断点编号
单步执行:next(简写n)
进入函数:step(简写s)
查看变量的值:print(简写p)变量名(只显示一次)
查看变量的值,并且使其动态改变:display 变量名(一直显示,并且动态变化)
删除10中变量的显示:undisplay 变量号(非变量名)
跳到某行:until 行号(中途有断点则暂停到断点处)
查看调用堆栈:bt
执行完当前的函数:finish
设置变量的值:set var 变量名 = 值
关闭断点:disable 断点号
开启断点:enable 断点号
执行上一次的指令:Enter按键
退出gdb:quit(简写q)
首先我们可以使用list显示当前程序入口代码:

在调试的关键点上使用break命令添加断点,并是可以使用info break查看断点:

添加断点后可以使用run命令开始运行程序,程序将运行至第一个断点处:

程序运行后使用 print 命令查看当前的变量值


使用 next 命令可以进行单步调试,每次执行一行,同样可以使用print 命令查看变量变化

如果需要重复关注变量值,可以使用display命令这样每次执行暂停后都会自动显示变量值


如果想停止调试,可以执行quit命令退出调试界面。

其他命令大家可以自行尝试,比如continue可以直接从当前位置直接执行到下一个断点处,使用的频率也比较高,这里不在复述。--孟德慧。
在日常调试中,我们经常会遇到段错误。使用gdb可以可以很容易的找到错误的根源。
首先,重新使用–g选项编译出错代码。并正常运行直至其出段错误。测试代码如下:


段错误触发后,同目录下回生成一个core文件,里面保存的是段错误相关信息。如果core文件没有生成,则是因为系统默认core文件大小为0,可以运行ulimit -c 10000来设置core文件容量,然后重新执行程序。
得到core文件后,使用gdb./test core 来查看出错代码所在位置。

并可以执行run命令在gdb调试界面下直接运行程序,使段错误再次出现。

之后执行 pirnt命令来查看出错行相关数值来确认错误信息:确定*p为空指针操作(实际代码中更多的可能是野指针或越界操作)。

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!
分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!点击这里找小助理0元领取:

  广告 嵌入式/物联网开发学习资料    

 

标签:core,入门,查看,GDB,简写,断点,调试
From: https://www.cnblogs.com/zxdplay/p/17736270.html

相关文章

  • 【RZ7889】直流电机驱动IC的调试
    智能锁主控新添加了一个驱动直流有刷电机的功能,这里我使用RZ7889,记录一些问题。首先放原理图。此处DIR_A连接的是PB7引脚,DIR_B连接PB6引脚。其中PB7可输出PWM,PB6只能作为普通IO使用。(本想都接具有PWM输出的引脚,这里设计错误)由于输入电压为12V,还要进行电流采样......
  • 100天精通Golang(基础入门篇)——第2天:学习Go语言的前世今生:一门强大的编程语言的崛起
    ......
  • Ubuntu20.04 入门ip ssh 源
    sudovi/etc/netplan/00-installer-config.yamlnetwork:version:2ethernets:ens32:dhcp4:falseaddresses:[192.168.1.5/24]gateway4:192.168.1.1nameservers:addresses:[114.114.114.114]#addresses:192.168.1.5/24]......
  • rabbitmq快速入门
    镜像启动命令dockerrun\-eRABBITMQ_DEFAULT_USER=root\-eRABBITMQ_DEFAULT_PASS=123456\--namemq\--hostnamemq1\-p15672:15672\-p5672:5672\-d\rabbitmq:3-management   ......
  • Web-入门-SpringBoot快速入门 创建springboot web项目
    web入门spring官网spring发展到今天已经形成了一种开发生态圈,spring提供了若干个子项目,为每个项目用于完成特定的功能。这些框架都是基于一个基础框架:直接基于SpringFramework基础框架进行开发会有两大难题:1.配置繁琐。2.入门难度大。所以spring家族意识到了这一点,......
  • Kafka入门经典教程
    1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic、发送消息、消费消息?3.如何书写Kafka程序?4.数据传输的事务定义有哪三种?5.Kafka判断一个节点是否活着有哪两个条件?6.producer是否直接将数据发送到broker的leader(主节点)?7.Kafaconsumer是否可以消费指定分区消息?8.Kafka消息......
  • mysql入门和高级教程概念
    入门教程MySQL是一个流行的开源关系型数据库管理系统,被广泛用于各种应用程序和网站开发中。以下是一个简单的MySQL教程,介绍了如何入门使用MySQL数据库:1.安装MySQL首先,您需要在计算机上安装MySQL数据库。您可以从MySQL官方网站下载适用于您的操作系统的MySQL安装程......
  • Hive函数入门——内置函数+用户定义函数
    1、内置函数1、字符串、时间类型函数之前也是在c语言里面学过,包括concat、split等;时间类型函数:前不久用到的函数:date_add--->当前日期的后的第几天的日期;date_sub--->当前日期的前的第几天的日期;2、数学函数、集合函数round--取整数值(还能指定保留的精度)floor--向下取整......
  • 一款免费的响应式界面调试工具
    不知道大家平时开发响应式前端代码是如何调试的?是不是也跟我一样,通过浏览器的开发者工具来切换不同的界面尺寸来看验证效果呢?可能是因为习惯了,平时就不停的切换不同尺寸来看效果。直到TJ君看到今天要推荐的这个免费工具,我才发现之前的调试方式好傻...使用体验下面,我们还一起来......
  • Idea+SpringBoot控制台调试打印sql语句
    在application.yml中添加:logging:level:com.xiaobai.stock.mapper:DEBUG//注意:':'后有空格,不能省略mapper:运行时控制台 ......