Linux -- 认识 gdb

目录

前言:

Debug 模式和 Release 模式

怎么安装 gdb?(CentOS7)

怎么使用 gdb?

进入 gdb 模式:

查看代码:

 执行代码:

断点:

打断点:

查看断点:

删除断点:

使能断点:

逐过程与逐语句调试: 

查看变量:

一次性显示:

常显示:

范围调试:

多分枝测试:

退出 gdb :

​编辑 


前言:

前面我们学习了怎么在Linux下编写代码和运行代码,下面将学习怎么调试代码。

Debug 模式和 Release 模式

可执行程序有两个模式,一个是 Debug 模式,一个是 Release 模式:

1、Debug 模式下的可执行程序添加了调试信息,可以被调试,且体积较大

2、Release 模式下的可执行程序去掉了调试信息,不可以被调试,且体积较小

gcc/g++编译后的可执行程序默认为 Release 模式,若需要生成的可执行程序为 Debug 模式,需要在编译时,加上 -g

怎么安装 gdb?(CentOS7)

root 用户下,输入命令 yum install -y gdb

或者在普通用户下,输入 sudo yum install -y gdb

怎么使用 gdb?

我们现在写了一段代码,文件名为 test.c ,下面将演示如何调试这段代码:

进入 gdb 模式:

先把代码编译后,得到可执行程序 test,gdb 可执行程序(Debug) 就可以开始调试代码,千万记住是Debug模式,Release模式不能调试代码

 

必须是可执行程序才可以调试,否则会报错,提示该文件不是可执行程序! 

 

查看代码:

l 命令可以查看代码,一次可以查看 10 行:

 

我们也可以指定行数查看代码, l 行数 即可:

l 1 表示从头开始查看代码,回车可以向后查看代码:

如果行数不是 1 ,而是其他数字,则会显示 行数 的上下 10 行代码!

 

也可以指定想查看的代码的开始行和结尾行,l 数字,数字:

 

 执行代码:

gdb 模式下可以运行代码,查看运行结果,输入命令 r

 

断点:

打断点:

命令 b 行数 可以给指定的代码打断点:

命令 b 函数 可以给指定的函数打断点:

命令  b  文件名:行数  可以给指定文件的某一行代码打断点,指定的文件是可执行程序的依赖文件:

 

查看断点:

命令 info b 可以查看断点信息:

删除断点:

命令 d 断点编号 可以删除断点,注意是断点编号,而不是断点所在的行数

使能断点:

如果我们不想让这个断点生效,又不想删除断点,我们可以禁用断点,disable 断点编号 可以禁用断点,当我们查看断点信息时,Enb 列可以查看断点是否被禁用了,y 表示启用断点,n 表示禁用断点

enable 断点编号 可以重新打开断点: 

 

逐过程与逐语句调试: 

1、逐过程表示调试时,若遇到函数,会执行完整个函数,不会进入函数内部调试,把函数当作一条语句;

2、逐语句表示代码一条一条的调试,若遇到函数,会进入函数内部一句一句调试代码。

在进行逐过程和逐语句调试时,要先把代码跑起来,代码遇到断点会停下来,在代码停下来的地方,我们可以选择逐过程还是逐语句调试代码,下面是具体演示:

假设我们在代码的第16行打上了断点,

命令 n 表示逐过程:

命令 s 表示逐语句:

如果我们在调试时想跳出 for 循环,可以用命令 until 行数,跳转到指定的代码,当然 until 不止可以跳出 for 循环,想跳转的情况都可以使用。 

 

查看变量:

当我们逐过程或者逐语句调试时,想查看某个变量的值或者变量的地址,gdb 中可以选择一次性查看或者常显示 。

一次性显示:

命令 p 变量名 可以查看当前执行下变量的值,不过只显示一次,继续调试时不再显示:

常显示:

display 变量名 可以在执行代码时常显示变量的值:

我们常显示变量的值时,每个变量前面都有编号,如果我们不想常显示某个变量,undisplay 变量对应的编号 就可以取消常显示

 

范围调试:

除了前面 until 可以跳转到指定的代码外,还有以下两个常见的命令可以进行范围调试:

命令 c 可以从当前断点运行到下一个断点:

命令 finish 可以执行完当前的函数。

如下所示,命令 bt 可以查看调用堆栈,当前执行的函数为Sum,命令 finish 就可以执行完 Sum 函数,回到调用该函数的那一行代码:

多分支测试:

 

在进入 if 判断时,命令 set  var  变量名=值 可以在不修改代码的情况下,修改变量的值, 实现其他分支的测试:

 

注意修改变量的值的时机,在进入 if 判断之前修改变量的值的话,没办法如预期设想的走向另一个分支: 

 

退出 gdb :

输入命令 quit 就可以退出:

 

本文内容结束,欢迎各位大佬的批评指正! 

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

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

相关文章

前端埋点数据收集和数据上报

原文地址 什么是埋点 学名叫时间追踪(Event Tracking), 主要针对用户行为或者业务过程进行捕获,处理和发送相关技术及实施过程. 埋点是数据领域的一个专业术语,也是互联网领域的俗称,是互联网领域的俗称 埋点是产品数据分析的基础&#xf…

深度解读李彦宏的“不要卷模型,要卷应用”

深度解读李彦宏的“不要卷模型,要卷应用” —— AI技术的应用之道 引言 在2024世界人工智能大会的舞台上,李彦宏的“不要卷模型,要卷应用”言论犹如一石激起千层浪,引发了业界对AI技术发展路径的深思。本文将深入探讨这一观点&a…

Eagle 4.0 更新了哪些功能,值得购买吗?

这个全新的版本带来了一系列重磅级别的更新,包括全新的「插件系统」、「全新的 UI 风格」以及「AI 工具」等。所有这些,都是为了提供给用户更加优质的使用体验,让工作的流程更加流畅,更加高效。 我们的团队始终倾听用户的声音&am…

C语言:指针详解(5)

目录 一、sizeof()函数和strlen()函数的对比 二、数组和指针笔试题解析 三、指针运算笔试题解析 正文开始 一、sizeof()函数和strlen()函数的对比 1.sizeof()函数 在学习操作符的时候,我们了解了sizeof()函数。sizeof()函数是用来计算变量所占内存空间大小的&a…

算法笔记——LCR

一.LCR 152. 验证二叉搜索树的后序遍历序列 题目描述: 给你一个二叉搜索树的后续遍历序列,让你判断该序列是否合法。 解题思路: 根据二叉搜索树的特性,二叉树搜索的每一个结点,大于左子树,小于右子树。…

男女相貌之秘 -高直上人

描述 高直上人,一个富有才华的老师! 对于大家的学习有不可多得的帮助。 内容 目前主要的内容以面相为主,对于学习面相有比较大的帮助! 但是网络上面错综复杂,很多老旧的版本影响学习! 而这里我整理了相…

Python3.6.6 OpenCV 将视频中人物标记或者打马赛克或加图片并保存为不同格式

1、轻松识别视频人物并做出标记 需安装face_recongnition与dlib,过程有点困难,还请网上查找方法 import face_recognition import cv2 #镜像源 -i https://pypi.mirrors.ustc.edu.cn/simple # 加载视频 video_file E:\\videos\\1.mp4 video_capture …

Qt下使用OpenCV的鼠标回调函数进行圆形/矩形/多边形的绘制

文章目录 前言一、设置imshow显示窗口二、绘制圆形三、绘制矩形四、绘制多边形五、示例完整代码总结 前言 本文主要讲述了在Qt下使用OpenCV的鼠标回调在OpenCV的namedWindow和imshow函数显示出来的界面上进行一些图形的绘制,并最终将绘制好的图形显示在QLabel上。示…

UE4 解决创建布料报错:三角形退化

**【问题】**创建创建布料时报错:三角形退化 【方法】 1.要重新绑定:导入到ue4为静态网格体,勾选“移除退化”,再导出fbx,再重新绑定 2.不用重新绑定:使用排除法(费时)&#xff0c…

全栈物联网项目:结合 C/C++、Python、Node.js 和 React 开发智能温控系统(附代码示例)

1. 项目概述 本文详细介绍了一个基于STM32微控制器和AWS IoT云平台的智能温控器项目。该项目旨在实现远程温度监控和控制,具有以下主要特点: 使用STM32F103微控制器作为主控芯片,负责数据采集、处理和控制逻辑采用DHT22数字温湿度传感器,精确采集环境温湿度数据通过ESP8266 W…

Mac和VirtualBox Ubuntu共享文件夹

1、VirtualBox中点击设置->共享文件夹 2、设置共享文件夹路径和名称(重点来了:共享文件夹名称) 3、保存设置后重启虚拟机,执行下面的命令 sudo mkdir /mnt/share sudo mount -t vboxsf share /mnt/share/ 注:shar…

Leetcode-203-移除链表元素-临时变量作用域-c++

题目详见https://leetcode.cn/problems/remove-linked-list-elements/ 题解代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullpt…

你需要知道的笔记本养护的几个小知识

笔记本充电器可以长期不拔吗? 可以,但建议偶尔使用电池激发电池活性并且修正电量计精度; 当充电器接入后,笔记本会优先使用充电器进行供电而不会使用电池供电,同时充电器也会为缺电的电池补充电量。 现在笔记本电脑普遍…

大数据开发中的数据驱动决策:关键问题与实践指南

目录 决策前的准备工作1. 我已经掌握了哪些信息?2. 我们已经做出决定了吗?3. 我们需要哪些额外信息以及何时需要? 决策过程中的关键问题1. 我们需要做这个决定吗?2. 错误地做出这个决定的代价是什么? 决策后的反思1. 我…

《Python零基础入门》——关于PyCharm使用技巧及python基本概念

从本次文章开始,我们将学习一门新的编程语言——Python。作为最热门的编程语言,Python相对比较清晰、简单。 python主要的编译工具就是pycharm,关于pycharm的安装及python配置环境,大家可自行参考网络上的教程,本文不…

# Redis 入门到精通(一)数据类型(4)

Redis 入门到精通(一)数据类型(4) 一、redis 数据类型–sorted_set实现时效性任务管理 1、sorted_set 类型数据操作的注意事项 score 保存的数据存储空间是64位,如果是整数范围是-9007199254740992~9007199254740992…

QT creator与VS2019 QT加载模块方法

QT creator与VS2019加载模块方法 QT creator,pro文件添加 VS2019 QT

酷克数据亮相第13届PostgreSQL中国技术大会,获数据库杰出贡献奖

7 月 12 日,第 13 届 PostgreSQL 中国技术大会在杭州盛大开幕。本次大会以“聚焦云端创新,汇聚智慧共享”为主题,邀请了国内外 PG 领域众多行业大咖、学术精英及技术专家,共同探讨数据库领域的发展趋势、技术创新和实践经验。酷克…

[Vulnhub] Tr0ll3 aircrack-ng+lynx

信息收集 IP AddressOpening Ports192.168.101.147TCP:22 $ ssh start192.168.101.147 用户:Start startTr0ll3:~$ find / -type f -perm 0777 2>/tmp/1 startTr0ll3:~$ cat /var/log/.dist-manage/wytshadow.cap | nc 192.168.101.128 10035 WIFI握手包 aircrack-ng 破…

记一次 .NET某上位视觉程序 离奇崩溃分析

一:背景 1. 讲故事 前段时间有位朋友找到我,说他们有一个崩溃的dump让我帮忙看下怎么回事,确实有太多的人在网上找各种故障分析最后联系到了我,还好我一直都是免费分析,不收取任何费用,造福社区。 话不多…