gdb调试工具详解

一、知识铺垫

1、程序的发布方式有两种,debug模式和release模式

2、gcc/g++形成的可执行程序默认是release模式

3、要使用gdb调试,必须在源代码生成可执行程序的时候, 加上 -g 选项

命令:gcc test.c -o test -g

 

很明显可以看出debug模式下的文件比release模式下的文件要大 

4、读取可执行程序的数据段格式命令:readelf -S + 可执行程序名

 

对比release模式,很明显debug模式下多出来了许多调试信息

 二、gdb的使用

用于调试的代码 

  #include <stdio.h>int AddToTop(int top){int res = 0;for(int i = 1; i <= top; i++){res += i;}return res;}int main(){int top = 100;int result = AddToTop(top);printf("result:%d\n", result);return 0;}

 1、启动gdb

gdb + 可执行程序

或者

gdb -q + 可执行程序

-q选项可以屏蔽一些gdb版本等相关信息。

 2、退出gdb

可以输入quit进行退出,也可以使用快捷键Ctrl+d

 3、显示代码

输入list或者l即可显示代码,一次显示10行代码

gdb会记录最近一次的命令,如果命令无变化,可以直接回车

 

list/l 行号:接着上次的位置往下列,每次列10行。
ist/l 函数名:列出某个函数的源代码。

 4、运行程序

 输入run或者r开始运行程序,如果有断点则运行到断点处,如果没有断点,就直接运行结束。

5、断点相关命令

break/b + 行号:在某一行设置断点

break/b + 函数名:在某个函数开头设置断点 


  info b:查看断点信息


 d/delete + 断点编号:删除断点

断点编号是在查看断点信息中的Num值。

 6、调试程序时的相关命令

 n/next:逐过程,相当于VS2022中的F10

 

它会跳过空行,直接跳到有代码的那一行


p/print + 变量名:打印变量内容


s/step:逐语句,相当于VS2022中的F11 


bt/breaktrace:查看当前的调用堆栈


finish:将当前函数跑完就停下来 


display + 变量名: 跟踪查看一个变量,每次停下来都显示它的值

undisplay + 编号:取消对先前设置的那些变量的跟踪


until + 行号:跳转至指定行

 


continue/c:运行至下一个断点处停下来 

类似于你在VS2022上打了多个断点,按F5就可以运行到各个断点处。


disable + 断点编号:禁用断点
enable + 断点编号:启用断点

执行这个命令并不会删除断点,只是断点使不使能的问题。


set var + 变量名:设置该变量为某个值 

 

这次的分享就到这里了,觉得有所收获的话,就给博主三连吧,创作不易,你的支持将是我的动力 

谢谢!!! 

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

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

相关文章

DBA技术栈MongoDB: 数据增改删除

该博文主要介绍mongoDB对文档数据的增加、更新、删除操作。 1.插入数据 以下案例演示了插入单个文档、多个文档、指定_id、指定多个索引以及插入大量文档的情况。在实际使用中&#xff0c;根据需求选择适合的插入方式。 案例1&#xff1a;插入单个文档 db.visitor.insert({…

深度解析 Compose 的 Modifier 原理 -- PointerInputModifier

" Jetpack Compose - - Modifier 系列文章 " &#x1f4d1; 《 深入解析 Compose 的 Modifier 原理 - - Modifier、CombinedModifier 》 &#x1f4d1; 《 深度解析 Compose 的 Modifier 原理 - - Modifier.composed()、ComposedModifier 》 &#x1f4d1; 《 深入解…

智慧文旅运营综合平台:重塑文化旅游产业的新引擎

目录 一、建设意义 二、包含内容 三、功能架构 四、典型案例 五、智慧文旅全套解决方案 - 210份下载 在数字化浪潮席卷全球的今天&#xff0c;智慧文旅运营综合平台作为文化旅游产业与信息技术深度融合的产物&#xff0c;正逐渐显现出其强大的生命力和广阔的发展前景。 该…

JAVA RPC Thrift基操实现与微服务间调用

一、Thrift 基操实现 1.1 thrift文件 namespace java com.zn.opit.thrift.helloworldservice HelloWorldService {string sayHello(1:string username) }1.2 执行命令生成Java文件 thrift -r --gen java helloworld.thrift生成代码HelloWorldService接口如下 /*** Autogene…

Android OpenGL EGL使用——自定义相机

如果要使用OpenGl来自定义相机&#xff0c;EGL还是需要了解下的。 可能大多数开发者使用过OpengGL但是不知道EGL是什么&#xff1f;EGL的作用是什么&#xff1f;这其实一点都不奇怪&#xff0c;因为Android中的GlSurfaceView已经将EGL环境都给配置好了&#xff0c;你一直在使用…

数据操作——Column 对象

Column 对象 1. 什么是Column对象 Column 表示了 Dataset 中的一个列, 并且可以持有一个表达式, 这个表达式作用于每一条数据, 对每条数据都生成一个值 2.Column对象如何创建 ’ 单引号 ’ 在 Scala 中是一个特殊的符号, 通过 ’ 会生成一个 Symbol 对象, Symbol 对象可以理…

《SPSS统计学基础与实证研究应用精解》视频讲解:SPSS数据查找

《SPSS统计学基础与实证研究应用精解》4.4 视频讲解 视频为《SPSS统计学基础与实证研究应用精解》张甜 杨维忠著 清华大学出版社 一书的随书赠送视频讲解4.4节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。本书旨在手把手教会使…

【QT+QGIS跨平台编译】之三:【OpenSSL+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、OpenSSL介绍二、OpenSSL配置三、Window环境下配置四、Linux环境下配置五、Mac环境下配置 一、OpenSSL介绍 OpenSSL是一个开放源代码的软件库包&#xff0c;应用程序可以使用这个包来进行安全通信&#xff0c;避免窃听&#xff0c;同时确认另一端连接者的身份。这…

Python文件操作和异常处理:高效处理数据的利器

文章目录 一、引言1.1 文件操作和异常处理对于编程的重要性1.2 Python作为实现文件操作和异常处理的强大工具 二、为什么学习文件操作和异常处理2.1 处理各种文件格式&#xff1a;从文本到图像到音频等2.2 确保代码的鲁棒性&#xff1a;有效处理异常情况 三、文件读取和写入3.1…

2023年12月 Scratch 图形化(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch图形化等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 在制作推箱子游戏时,地图是用数字形式储存在电脑里的,下图是一个推箱子地图,地图表示如下: 第一行(111111) 第二行(132231) 第三行(126621) 第四行( ) 第五行(152…

网络安全全栈培训笔记(56-服务攻防-数据库安全H2ElasticsearchCouchDBInfluxdb复现)

第56天 服务攻防-数据库安全&H2&Elasticsearch&CouchDB&Influxdb复现 知识点&#xff1a; 1、服务攻防数据库类型安全 2、influxdb,.未授权访问wt验证 3、H2 database-未授权访问-配置不当 4、CouchDB-权限绕过配合RCE-漏洞 5、ElasticSearch-文件写入&RC…

vue3前端开发,一篇文章看懂何谓pinia

vue3前端开发,pinia的基础练习第一节&#xff01; 前言&#xff0c;pinia是为了取代vuex而诞生的产品&#xff0c;它有一些改进。去掉了之前的mutations。只有一个action,既可以支持异步&#xff0c;又支持同步。还提供了解构函数&#xff0c;可以把返回的对象内部属性和方法直…