gdb 快速上手(附带测试案例)

在终端使用 gdb 对程序进行调试比较复杂,本文旨在帮助小白快速上手 gdb ,所以只介绍了一些比较重要的命令!

案例代码在文末!

一、gdb 调试

1、编译源文件

gcc -g test.c -o test

2、启动程序

gdb ./test

  结果如下:

说明:结果中出现:Reading symbols from ./test03... 即成功启动调试程序! 

 3、设置断点

  方式一:执行命令

b main           //在入口函数出设置一个断点

  方式二:执行命令

b .c文件路径:行数//在test03.c文件的123行设置一个断点
b /root/sql_test/test03.c:123          

  结果如下:

4、查看断点

  执行命令:

info b             //查看断点情况及断点对应编号

  结果如下:

5、删除断点

  执行命令:

//删除指定编号(Num)的断点
d num1 num2…          //删除1号断点
d 1        

  结果如下:

6、进入调试

  执行命令:

r              //进入调试,并到达第一个断点

  结果如下:

7、单步调试

  方式一:执行命令

n             //单步调试但不进入具体函数内部

  结果如下:

  说明:调试语法糖------直接回车会执行上一步调试操作;

  方式二:执行命令

s              //单步调试且进入具体函数内部

  结果如下: 

8、从一个断点跳到下一个断点

  执行命令:

c             //从一个断点跳到下一个断点

  结果如下: 

9、监视变量

  执行命令:

watch 变量名             //用于监视某个变量,一旦变量发生变化就会立即停止

  结果如下:

说明:监视某个变量前,尽量关闭所有断点。在使用GDB进行调试时,当你使用watch命令监视某个变量时,最好将断点关闭或删除。这是因为watch命令会在每次变量的值发生变化时触发断点,以便你能够捕捉到变量的变化。如果你在设置了断点的情况下使用watch命令,那么每当变量的值发生变化时,GDB会首先触发断点,然后再触发watch命令。这可能会导致调试过程中出现不必要的中断,使得调试变得困难。因此,为了更好地使用watch命令,建议在使用它之前关闭或删除断点。

10、查看变量

  执行命令:

p 变量名             //查看变量的值

  结果如下:

说明:通过上图可知,在查看变量i的值之前,设置了两个断点,分别为示例代码的第124、141行,第一个 p i 查看的是代码中全局变量i的定义值,第二个 p i 查看的是执行了第141行代码后i的值。 

11、查看源代码

  执行命令:

layout src             //弹出源码框且光标停留在第一个断点处,特别说明:快捷键Ctrl+X+A同样可以打开/关闭代码框

  结果如下:

说明:此时如果使用键盘上下翻滚键或者鼠标是无法将代码中的光标移至下一行的。正确做法:在命令行输入:n,即可将光标移至下一行,并通过语法糖(回车键)继续执行命令n。    

  结果如下: 

12、查看汇编代码

  执行命令:

layout asm            //打开汇编意义上的代码且光标停留在第一个断点处,特别说明:快捷键Ctrl+X+A同样可以打开/关闭代码框

  结果如下:

说明:此时如果使用键盘上下翻滚键或者鼠标是无法将代码中的光标移至下一行的。正确做法:在命令行输入:si,即可将光标移至下一行,并通过语法糖(回车键)继续执行命令si。

  结果如下:

13、从入口函数mian执行到断点,中间经历的函数

  执行命令:

bt            //从入口函数mian执行到断点,中间经历的函数(逆序看经历的函数)

  结果如下:

14、查看寄存器

  执行命令:

info r             //查看寄存器的值

  结果如下:

 15、结束当前程序

  执行命令:

k             //结束当前程序,但不会结束调试

  结果如下:

16、退出调试

  执行命令:

quit         //退出调试

  结果如下:

 二、测试代码

测试代码明天贴出!!! 

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

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

相关文章

Ansible学习笔记3

ansible模块: ansible是基于模块来工作的,本身没有批量部署的能力,真正具有批量部署的是ansible所运行的模块,ansible只是提供一个框架。 ansible支持的模块非常多,我们并不需要把每个模块记住,而只需要熟…

高基数类别特征预处理:平均数编码 | 京东云技术团队

一 前言 对于一个类别特征,如果这个特征的取值非常多,则称它为高基数(high-cardinality)类别特征。在深度学习场景中,对于类别特征我们一般采用Embedding的方式,通过预训练或直接训练的方式将类别特征值编…

day 31 面向对象 成员方法

class 类名称: 类的属类(定义在类中的变量,成员变量) 类的行为(定义在类中的函数,成员方法) # 设计一个类(类比生活中:设计一张等级表) class Student:name Nonegender Nonenatio…

DWA算法学习

一、DWA概念  DWA(动态窗口法)属于局部路径规划方法,为ROS中主要采用的方法。其原理主要是在速度空间(v,w)中采样多组速度,并模拟这些速度在一定时间内的运动轨迹,再通过一个评价函数对这些轨迹打分,最优的…

15.坐标添加带箭头的线

ol的官网示例中有绘制带箭头的线的demo&#xff0c;那个是交互式绘制&#xff0c;而不是根据经纬度坐标添加&#xff0c;在其基础上稍作修改&#xff0c;即可转为通过经纬度添加带箭头的线的功能&#xff0c;线和箭头的粗细大小样式都可以自定义 代码如下 <!DOCTYPE HTML P…

Java 多线程系列Ⅰ(创建线程+查看线程+Thread方法+线程状态)

多线程基础 一、创建线程的五种方法前置知识1、方法一&#xff1a;使用继承Thread类&#xff0c;重写run方法2、方法二&#xff1a;实现Runnable接口&#xff0c;重写run方法3、方法三&#xff1a;继承Thread&#xff0c;使用匿名内部类4、方法四&#xff1a;实现Runnable&…

5G工业网关赋能救护车远程监控,助力高效救援

智慧医疗是传统医疗业发展进步的必要趋势&#xff0c;医疗设备通过物联网技术的应用实现智能化转型。通过5G工业网关将医疗器械等设备的数据采集再经过专网传输到医疗系统中&#xff0c;实现医疗设备间的数据共享和远程监控&#xff0c;能够帮助医疗行业大大提高服务质量和管理…

Weblogic漏洞(四)之 CVE-2018-2894 任意文件上传漏洞

CVE-2018-2894 任意文件上传漏洞 漏洞影响 Weblogic受影响的版本&#xff1a; 10.3.6.012.1.3.012.2.1.212.2.1.3 漏洞环境 此次我们使用的是vnlhub靶场搭建的环境&#xff0c;是vnlhub中的Weblogic漏洞中的CVE-2018-2894靶场&#xff0c;我们 cd 到 CVE-2018-2894&#x…

基于KNN算法的鸢尾花种类预测

导入数据 iris_data load_iris() iris_data.data[0:5, :]array([[5.1, 3.5, 1.4, 0.2],[4.9, 3. , 1.4, 0.2],[4.7, 3.2, 1.3, 0.2],[4.6, 3.1, 1.5, 0.2],[5. , 3.6, 1.4, 0.2]])# 特征值名称 iris_data.feature_names[sepal length (cm),sepal width (cm),petal length (cm…

12、监测数据采集物联网应用开发步骤(9.1)

监测数据采集物联网应用开发步骤(8.2) TCP/IP Server开发 在com.zxy.common.Com_Para.py中添加如下内容 #锁机制 lock threading.Lock() #本机服务端端口已被连接客户端socket list dServThreadList {} #作为服务端接收数据拦截器 ServerREFLECT_IN_CLASS "com.plug…

PMP - 敏捷 3355

三个核心 产品负责人 负责最大化投资回报&#xff08;ROI&#xff09;&#xff0c;通过确定产品特性&#xff0c;把他们翻译成一个有优先级的列表 为下一个 sprint 决定在这个列表中哪些应该优先级最高&#xff0c;并且不断调整优先级以及调整这个列表 职责是定义需求、定义…

SSL核心概念 SSL类型级别

SSL&#xff1a;SSL&#xff08;Secure Sockets Layer&#xff09;即安全套接层&#xff0c;及其继任者传输层安全&#xff08;Transport Layer Security&#xff0c;TLS&#xff09;是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。 H…

取暖器UL1278测试项目及注意事项!!!

UL1278是可移动的挂墙式或吊顶式室内电暖器的标准&#xff0c;适用于额定电压不超过600V的可移动的且挂墙式或吊顶式的电暖器。不适用于固定式电暖器&#xff0c; 管道式电暖器&#xff0c;中心加热的炉。 取暖器UL认证UL1278标准测试项目&#xff1a; 泄露电流试验&#xff…

leetcode 503. 下一个更大元素 II

2023.8.28 本题类似于下一个更大元素I &#xff0c;区别就是数组变成循环的了&#xff0c;可以将nums数组先double一下&#xff0c;如&#xff1a;{1&#xff0c;2&#xff0c;1}变成{1&#xff0c;2&#xff0c;1&#xff0c;1&#xff0c;2&#xff0c;1}&#xff0c;再用单调…

ElasticSearch-集成ik分词器

本文已收录于专栏 《中间件合集》 目录 背景介绍版本选择优势说明集成过程1.下载安装包2.解压安装包3.重启ElasticSearch服务3.1通过ps -ef | grep elastic查看正在启动的es进程号3.2使用kill -9 xxx 杀死进程3.3使用 ./elasticsearch 启动es服务 分词测试细粒度分词方式分词请…

PXE网络批量装机(centos7)

目录 前言 一、实验拓扑图 二、PXE的组件 三、配置PXE装机服务器 1、设置防火墙、selinux 2.安装、启动vsftp 3、拷贝系统文件到/var/ftp用于装机 4、配置tftp 5、准备pxelinx.0文件、引导文件、内核文件 6、配置本机IP 7、配置DHCP服务 8、创建default文件 四、配…

MFC -- Date Time Picker 控件使用

当前环境&#xff1a;VS2015 Windows 10 //&#xff08;一&#xff09;使用普通函数&#xff0c; 获取当前时间CString strCurrentTime; COleDateTime m_time COleDateTime::GetCurrentTime(); strCurrentTime m_time.Format(_T("%Y-%m-%d %H:%M:%S")); SetDlgIt…

问道管理:稳增长持续发力 A股市场信心迎修复

自7月政治局会议释放稳添加活泼信号以来&#xff0c;多项支持经济方针近期陆续落地。与此同时&#xff0c;活泼资本商场、提振出资者决计的一系列行动也正在逐渐发挥作用。业内人士表明&#xff0c;系列方针的出台进一步安稳了商场对我国经济的预期&#xff0c;也将助力修正出资…

STM32启动模式详解

文章目录 前置知识1. 单片机最小系统组成2. BOOT电路3. 三种启动模式4. 存储器映射 从主FLASH启动从系统存储区启动从SRAM启动 前置知识 1. 单片机最小系统组成 一个单片机最小系统由电源、晶振、下载电路、BOOT电路、和复位电路组成。少一个单片机都启动不了。 2. BOOT电路 …

设置微软Edge浏览器主页和新标签页,摆脱扰人和分散注意力的主页

默认情况下&#xff0c;Microsoft Edge会向您显示世界上最令人分心和讨厌的主页&#xff08;也称为主屏幕&#xff09;。微软不想只向你展示一个搜索框&#xff0c;也许还有一个漂亮的背景或一些你喜欢的网站的快捷方式&#xff0c;而是想在你面前扔一堆新闻标题和广告。 你可…