首页 > 其他分享 >gdb学习

gdb学习

时间:2023-06-07 21:57:35浏览次数:34  
标签:变量 学习 gdb 运行 设置 格式 断点 表达式

GDB

基本gdb命令

运行有关命令


run(简写r): 运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步的命令。

 

continue(简写c):继续执行,到下一个断点处(或运行结束)

 

next(简写n): 单步跟踪程序,当遇到函数调用时,直接调用,不进入此函数体;

 

step(简写s):单步调试如果有函数调用,则进入函数;与命令n不同,n是不进入调用的函数的

 

until:运行程序直到退出循环体; / until+行号: 运行至某行

 

finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。

 

quit:简记为 q ,退出gdb

 

 

断点有关命令


 

break n(简写b n):在第n行处设置断点 ;可以带上代码路径和代码名称: b OAGUPDATE.cpp:578)

 

break func:在函数func()的入口处设置断点,如:break cb_button

 

delete 断点号n:删除第n个断点

 

disable 断点号n:暂停第n个断点

 

enable 断点号n:开启第n个断点

 

clear 行号n:清除第n行的断点

 

info breakpoints(简写info b) :显示当前程序的断点设置情况

 

 

显示有关的命令


list(简写l):列出程序的源代码,默认每次显示10行。

 

list 行号:将显示当前文件以“行号”为中心的前后10行代码,如:list 12

 

list 函数名:将显示“函数名”所在函数的源代码,如:list main

 

print 表达式:简记为 p ,其中“表达式”可以是任何当前正在被测试程序的有效表达式,比如当前正在调试C语言的程序,那么“表达式”可以是任何C语言的有效表达式,包括数字,变量甚至是函数调用。

 

print a:将显示整数 a 的值

 

print name:将显示字符串 name 的值

 

display 表达式:在单步运行时将非常有用,使用display命令设置一个表达式后,它将在每次单步进行指令后,紧接着输出被设置的表达式及值。如: display a

 

watch 表达式:设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序。如: watch a

 

where/bt :当前运行的堆栈列表

 

set args 参数:指定运行时的参数

 

show args:查看设置好的参数

 

info program: 来查看程序的是否在运行,进程号,被暂停的原因

多进程有关的命令

follow-fork-mode


set follow-fork-mode [parent| child]   设置调试进程

show follow-fork-mode                    查看当前进程

detach-on-fork


set detach-on-fork [on|off]     调试当前进程时,其它进程是运行还是挂起

inferiors


info inferiors    查询当前进程

inferior <inferior num>  切换要调试的进程

多线程有关的命令


info threads  查看线程

 

thread <ID>   切换线程

 

set secheduler-locking off|on|step  设置运行的线程

esp32_jtag 示例

我们用jtag章节中的代码作为示例,主要演示设置断点,观察变量,观察堆栈区等操作

断点演示

设置断点

设置断点,在第65 83 89行设置断点

image-20230607150309682

查看断点

可以使用info breakpoint查看设置的断点

image-20230607150543238

删除断点

同样可以使用delete 删除相关断点

image-20230607150640369

运行,查看变量和堆栈区

使用c来运行程序到断点处

查看变量

使用以下命令来观察相关变量


display + 变量名 

使用以下命令来观察堆栈


bt

使用以下命令来观察内存


x /20xh 0x1000000

 

/*

格式: x /nfu

x 是 examine 的缩写,意思是检查。

n表示要显示的内存单元的个数,比如:20

 

f表示显示方式, 可取如下值:

x 按十六进制格式显示变量。

d 按十进制格式显示变量。

u 按十进制格式显示无符号整型。

o 按八进制格式显示变量。

t 按二进制格式显示变量。

a 按十六进制格式显示变量。

i 指令地址格式

c 按字符格式显示变量。

f 按浮点数格式显示变量。

 

 

u表示一个地址单元的长度:

b表示单字节,

h表示双字节,

w表示四字节,

g表示八字节

 

*/

image-20230607151004922

image-20230607151216235

标签:变量,学习,gdb,运行,设置,格式,断点,表达式
From: https://www.cnblogs.com/doincli/p/17464670.html

相关文章

  • GIT学习
    Git学习git的工作流程工作流程如下从远程仓库中克隆代码到本地仓库从本地仓库中checkout代码然后进行代码修改在提交前先将代码提交到暂存区提交到本地仓库。本地仓库中保存修改的各个历史版本修改完成后,需要和团队成员共享代码时,将代码push到远程仓库git代......
  • 学习日记——oop的三大特性
    1.封装(1)什么是封装隐藏方法控制语句(2)封装的步骤如何隐藏private如何方法:setter/getter如何控制语句:if判断(3)实战训练    2.继承(1)继承的原因 多类之间拥有多个相同的属性或方法 解决方式是:将相同的属性和方法抽取出来,封装到一个新的类中,并继承新......
  • 关于cockpit的学习
    关于cockpit的学习背景使用node-exporter可以监控很多资源使用情况但是这个需要搭建一套prometheus和grafana的工具并且每个机器都需要安装一套node-exporter的进行数据dumpcockpit是红帽开发的一套监控组件,可以监控网络,IO服务,高级版本还可以监控KVM以及容器,也可......
  • 机器学习---水果和蔬菜的检测和识别
    一、选题的背景近年来,随着全球经济的发展,水果消费市场规模不断扩大,水果种类也日益丰富,水果检测与识别技术在农业生产、仓储物流、超市零售等领域具有重要的应用价值,传统的水果检测与识别方法。主要依赖于人工识别,这种方法在一定程度上受到人力成本、识别效率和准确性等方面的限制......
  • 目录-学习目标
    编程前端:vue.js后端:Go系统概念进程管理线程并发套接字(socket)POSIX网络概念I/O管理虚拟化存储文件系统服务管理(systemd)启动管理(initd)操作系统UbuntuArch终端操作Bash/vim/shell文本处理(awk、sed、grep等)进程监控(ps、top、htop、lsof)网络(nmap、tcpdump......
  • 机器学习-头饰20类-图像分类,头饰图像分类-Resnet50
    (一).选题背景:什么是图像分类?它有哪些应用场合?图像分类任务是计算机视觉中的核心任务,其目标是根据图像信息中所反映的不同特征,把不同类别的图像区分开来。从已知的类别标签集合中为给定的输入图片选定一个类别标签。它的难点在于:跨越“语义鸿沟”建立像素到语义的映射。还有就是......
  • 机器学习 房价预测
     机器学习     房价预测 选题背景 1)CRIM:每个城镇的人均犯罪率。这个属性表示每个城镇中每个人的犯罪率。它提供了有关该地区犯罪活动水平的信息。 2)CHAS:二元变量,决定每个城镇的土地是否位于查尔斯河的边界上。如果通道与河流接触,它的值为1,否则为0。它表明......
  • 第3天学习Docker-Docker部署常见应用(MySQL、Tomcat、Nginx、Redis、Centos)
    前提须知:(1)搜索镜像命令格式:dockersearch镜像名(2)设置Docker镜像加速器详见文章:Docker设置ustc的镜像源(镜像加速器)1、部署MySQL拉取镜像(这里拉取mysql5.7版本)[root@localhost~]#dockerpullmysql:5.7创建容器(默认运行)[root@localhost~]#dockerrun-di--name=my_mysql-p330......
  • RocketMQ 学习社区重磅上线!AI 互动,一秒了解 RocketMQ 功能源码
    作者:RocketMQ学习社区RocketMQ背景ApacheRocketMQ诞生至今,一直服务于100%阿里集团内部业务、阿里云以及开源社区数以万计的企业客户。历经十多年双十一严苛流量验证的RocketMQ,承载了超过万亿级消息规模的洪峰压力。2021年ApacheRocketMQ更是进入全新5.0时代。立足于企......
  • RocketMQ 学习社区重磅上线!AI 互动,一秒了解 RocketMQ 功能源码
    作者:RocketMQ学习社区RocketMQ背景ApacheRocketMQ诞生至今,一直服务于100%阿里集团内部业务、阿里云以及开源社区数以万计的企业客户。历经十多年双十一严苛流量验证的RocketMQ,承载了超过万亿级消息规模的洪峰压力。2021年ApacheRocketMQ更是进入全新5.0时代。立足......