Linux调试器gdb简介

目录

前言:

debug VS realse

GDB的基本操作

行号显示

设置断点

​编辑

查看断点信息

删除断点

禁用断点

开启断点

运行

逐过程

逐语句

 显示/追踪变量

查看调用堆栈

指定行号跳转

强制执行函数

断点间跳转

修改变量的值


前言:

GDB(GNU symbolic debugger)是GNU开源组织发布的一个强大的Unix/Linux下的程序调试工具,可以调试多种语言,vs环境中是通过图形化页面进行操作,而在Linux环境下则是进行纯文本的操作

GDB具有如下四个方面的的功能:

  • 启动你的程序,按照自定义的方式随心所欲的运行程序;
  • 在某个指定的位置或条件下暂停程序;
  • 当程序停住时,可以查看变量,寄存器,内存及堆栈;
  • 在程序执行过程中修改程序中的变量或条件,将一个bug产生的影响修正从而测试其他bug;

debug VS realse

程序的发布方式有两种,debug模式和release模式;其中debug为调试版本,而release为发布版本,debug与release版本对比如下:

  • 编译方式Debug版本通常使用无优化的编译方式,以便在调试过程中能够更好地跟踪代码执行过程,而Release版本则使用优化的编译方式,以提高程序的执行效率;

  • 调试信息Debug版本会包含完整的调试信息,包括变量名、函数名等,以便在调试过程中能够更好地理解代码的执行情况,而Release版本会删除调试信息,以减小程序的体积;

  • 错误检测Debug版本通常会开启各种错误检测机制,例如内存泄漏检测、数组越界检测等,以便在开发过程中能够及时发现和修复问题;而Release版本则会关闭这些错误检测机制,以提高程序的执行速度;

     注:  Linux gcc/g++编译与链接生成的可执行文件,默认为release模式;

调试时使用的源代码为test.c

makefile文件内容如下:

 进入gdb调试器的指令:gdb  可执行文件名

 退出gdb调试器的指令:quit

 验证了Linux gcc/g++编译与链接生成的可执行文件,默认为release模式;

由于release模式下可执行文件不包含调试信息,所以无法调试,若想生成的可执行文件为debug模式,需要编译链接时加上 -g 选项 ;修改makefile文件如下:

 此处验证了Debug版本的可执行文件体积大,而Release版本的可执行文件体积小;

由于生成的可执行文件是一个二进制文件,使用指令 readelf -S 可执行文件名 查看可执行文件的信息;

使用指令 readelf -S 可执行文件名 | grep -i debug 查看可执行文件中所包含的调试信息;

此处验证了debug版本的可执行文件包含调试信息;

GDB的基本操作

行号显示

l(list) 行号/函数名 --- 显示对应的的源代码,默认显示10行

 由于gdb自动记忆上次键入的指令,直接按Enter键便可浏览代码剩余部分;

设置断点

 断点的作用 通过设置断点,程序会在断点处停止执行;

b(breakpoint) + 行号 --- 在该行设置断点

b(breakpoint) 源文件名:行数(n) ---- 在该源文件的第n行设置断点

b 函数名 ---给当前调试的源文件中的某函数的第一行设置断点
b 源文件:函数名 ---给指定的源文件中的某函数的第一行设置断点

查看断点信息

info b ---- 查看断点信息

删除断点

d 断点编号n----删除n号断点

d breakpoints ---- 删除所有断点

禁用断点

disable b ---- 使所有断点无效
disable b 编号n ----使n号断点无效

开启断点

enable b 编号n ---- 使n号断点有效
enable b ---- 使所有断点有效

运行

  • 没有断点键入 r 直接运行到程序结束

  • 存在断点运行到第一个断点处停止运行

逐过程

n(next) ---- 相当于vs环境中的F10,用于排查函数是否出错

逐语句

s(step) ---- 相当于vs环境中的F11,一次执行一条语句,可进入函数内部

 显示/追踪变量

p(print) 变量名/&变量名 ---- 查看变量的值与地址

每次执行一条语句结束时,若想查看变量的值,都需要手动输入指令,太过于繁琐;

display 变量名/&变量名 ---- 跟踪查看变量的值与地址,每次执行指令结束后显示其值

undisplay 变量名编号n ---- 取消对n号变量的跟踪

查看调用堆栈

bt --- 查看调用堆栈

指定行号跳转

until 源代码行号 ----首先执行完区间代码,然后跳转到指定位置

强制执行函数

程序员在初步排查时推断可能是某个函数内部的代码逻辑出现问题,但是不采用逐语句的方式进入到函数内部进行调试,首先进入到函数内部,然后使用finish

finish ---- 在某个函数内部使用,将该函数运行结束后停止

断点间跳转

c(continue) ---- 从一个断点处,运行至下一个断点处

修改变量的值

修改test.c文件如下图所示:

set var 变量名=变量值 ---- 使用gdb调试时修改变量值,无需修改源代码,实现多分支测试

 

 

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

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

相关文章

这样管理精密空调系统,比一般方法好用百倍!

在现代社会,随着科技的飞速发展,人们对于舒适、安全、高效的空间环境需求不断增加。在这个背景下,精密空调监控系统作为一种前沿的技术解决方案,正逐渐成为各行各业关注的焦点。 精密空调监控系统不仅仅是对传统空调系统的升级&am…

使用ros_arduino_bridge控制机器人底盘

使用ros_arduino_bridge控制机器人底盘 搭建了ROS分布式环境后,将ros_arduino_bridge功能包上传至Jetson nano,就可以在PC端通过键盘控制小车的运动了。实现流程如下: 系统准备;下载程序;程序修改;分别启动PC与Jetson…

查看navicat链接密码

导出链接,带密码导出 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/239bcf0ad22d4de98524fa4d7db4a30d.png 查看密码 这个是navicat加密后的密码,需要解密 使用一段代码解密 这个是php代码,没有本地php环境,可以看在线…

UV胶水与聚氯乙烯PVC材料的塑料粘接,效果如何?

UV胶水可以与聚氯乙烯PVC很好地粘接。 PVC是一种常见的塑料材料,UV胶水通常对PVC具有良好的粘接性能。UV胶水可以在紫外线照射下迅速固化,形成坚固的粘接,因此通常被用于PVC制品的粘接和修复。 UV胶水与PVC粘接的优点: 1. 快速固…

Hello,World!

“Hello, world”的由来可以追溯到 The C Programming Language 。在这门编程语言中,它被用作第一个演示程序,向人们展示了在计算机屏幕上输出“Hello world”这行字符串的计算机程序。由于这个演示程序的简洁性和直观性,它成为了许多初学者学…

算法训练营第四十二天|动态规划:01背包理论基础 416. 分割等和子集

目录 动态规划&#xff1a;01背包理论基础416. 分割等和子集 动态规划&#xff1a;01背包理论基础 文章链接&#xff1a;代码随想录 题目链接&#xff1a;卡码网&#xff1a;46. 携带研究材料 01背包问题 二维数组解法&#xff1a; #include <bits/stdc.h> using namesp…

【simple-admin】FMS模块如何快速接入阿里云oss 腾讯云cos 服务 实现快速上传文件功能落地

让我们一起支持群主维护simple-admin 社群吧!!! 不能加入星球的朋友记得来点个Star!! https://github.com/suyuan32/simple-admin-core 一、前提准备 1、goctls版本 goctls官方git:https://github.com/suyuan32/goctls 确保 goctls是最新版本 v1.6.19 goctls -v goct…

免费简单好用的 webshell 在线检测:支持 php、jsp、asp等多格式文件

话不多说&#xff0c;直接上图上链接&#xff1a;https://rivers.chaitin.cn/?share3d4f2e8aaec211eea5550242c0a8170c 还是比较好用的&#xff0c;支持 PHP、JSP 文件 webshell 检测&#xff0c;看官方解释文档&#xff0c;引擎使用静态文本特征、骨架哈希、静态语义分析、动…

OpenHarmony社区运营报告(2023年12月)

• 截至2023年12月22日&#xff0c;OpenAtom OpenHarmony&#xff08;简称“OpenHarmony"&#xff09;社区累计超过6700名贡献者&#xff0c;产生26.9万多个PR&#xff0c;2.4万多个Star&#xff0c;6.7万多个Fork&#xff0c;59个SIG。 • 2023年12月16日&#xff0c;以“…

引领文旅创新_实时云渲染赋能2023湾区文采会元宇宙虚拟展厅

2023年11月3日&#xff0c;2023粤港澳大湾区公共文化和旅游产品&#xff08;东莞&#xff09;采购会&#xff08;下文简称&#xff1a;2023湾区文采会&#xff09;开幕式在东莞市文化馆举行。本届大湾区文采会以“文采潮流 融合共生”为主题&#xff0c;集聚了科技、时尚、潮流…

微信小程序:发送小程序订阅消息

文档&#xff1a;小程序订阅消息&#xff08;用户通过弹窗订阅&#xff09;开发指南 目录 步骤一&#xff1a;获取模板 ID步骤二&#xff1a;小程序端获取参数2.1、获取消息下发权限2.2、获取登录凭证&#xff08;code&#xff09; 步骤三&#xff1a;后端调用接口下发订阅消息…

JVM基础(6)——JVM垃圾回收器简介

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…