Linux——gdb调试器

news2024/11/23 12:55:28

目录

   前言:

二.gdb定义及指令:

如何查看该exe文件是否为Debug版本?两种方法:

三.gdb调试:

        调试指令1:l指令(小写L)

run指令:运行程序,相当于VS中的直接运行不调试——可简化输入r

 break指令:设置断点——指令可简化输入为b ​编辑 

info b指令:查看整个代码所有的断点信息

next指令:单条执行,相当于VS调试工具中的逐过程功能——可简化输入n

step指令:进入函数内部,相当于VS调试工具的逐语句功能——可简化输入s

continue指令:从当前位置的断点处跳到下一个断点处

 finish指令:gdb调试器自动停止调试,并且输出最终的代码执行结果。 

p+变量指令:可以查看当前变量的数值

display +变量指令:可以一直查看该变量的数值

 bt指令:查看当前所处函数栈帧的数据

delete breakpoints: 删除所有断点

delete breakpoints n: 删除序号为n的断点

disable breakpoints: 禁用断点

enable breakpoints: 启用断点


   前言:

         之前我介绍了Linux的编辑器vim,是专门用来编辑各种类型的语言代码。它主要使用的有3种模式,这三种模式涉及到的快捷键,设计方法极大的方便了我们编写代码,但是也只限于编写代码数据。

        然后又介绍了gcc/g++编译器,物如其名,它就是用来编译链接源文件进而生成可执行文件的。

        在Windows操作系统下,我们常用的编辑代码的软件有VS(Visual Studio)编译器,VS是一个基本完整的开发工具集,Visual Studio 旨在成为用于构建应用程序的功能丰富、强大且全面的解决方案,例如在该编译器下有着智能自动完成功能,可以帮助编程人员更快地输入代码;也有内置调试器,里面逐语句逐过程,断电功能帮助开发人员快速调试代码......。也就是说VS是编辑、编译、调试一体化的软件工具。

     

二.gdb定义及指令:

       在Linux操作系统中,调试代码又是一个单独的软件,叫gdb调试器。gdb调试器仍是Linux中没有的,需要使用yum指令去下载该软件:

sudo yum install -y gdb

子用户可以使用该指令,若子用户没有sudo权限,只能以root身份去下载

一般来说,GDB主要帮助你完成下面四个方面的功能:

1、按照自定义的方式启动运行需要调试的程序

2、可以使用指定位置和条件表达式的方式来设置断点
3、程序暂停时的值的监视
4、动态改变程序的执行环境 

 下载好后,我们需要回顾一下之前使用gcc/g++编译器,生成的可执行文件指令为:

gcc filename.c -o filename.exe

g++ filename.cpp -o filename.exe 

这两种指令默认的链接方式都是关联动态库,若要使用静态库链接,则需要如下:

gcc filename.c -o filename.exe -static

g++ filename.cpp -o filename.exe -static

 

 此外,gcc/g++默认生成的可执行文件类型是:release类型。

什么是release?

        Release 是“发行”的意思,Release 版本就是最终交给用户的程序,编译器会使尽浑身解数对它进行优化,以提高执行效率。Release版本的可执行文件体积会更小一些。

此外,除了Release版本,还有一种Debug版本。

        Debug 是“调试的意思”,Debug版本是程序开发人员用来测试代码的,编译器在生成 Debug 版本的程序时会加入调试辅助信息,并且很少会进行优化。

        根据上面了解的信息,我们若想使用gdb调试器对Debug类型的可执行文件进行调试就需要使用该指令:

gcc -g filename.c -o filename.exe 

                                -g选项是生成可执行文件是否为Debug的关键!

如何查看该exe文件是否为Debug版本?两种方法:

1.看这个文件的大小 (一般同文件的Debug版要比Release版字节大小要大一些):

如左图可知:上面的是Debug版本,大小为9888字节;下面的是Release版本,大小为8528字节。

2.通过指令查看: readelf -S 想要查看的文件名 grep debug (可以测试到该文件是否具备测试功能 

        上面绿色框中的内容就是Debug版本专属的具有调试功能的文件,这也是Debug版本比Release版本体积大的主要原因!         


三.gdb调试:

试验1:以下为写好的test.c文件代码,将通过该代码文件去调试

 

调试指令1:l指令(小写L)

l+数字:显示从代码的某一行开始的内容。

注:默认显示10行内容,再次输入l键按回车便可继续显示后面的内容。

 


run指令:运行程序,相当于VS中的直接运行不调试——可简化输入r


 break指令:设置断点——指令可简化输入为b  

info b指令:查看整个代码所有的断点信息

 


next指令:单条执行,相当于VS调试工具中的逐过程功能——可简化输入n

step指令:进入函数内部,相当于VS调试工具的逐语句功能——可简化输入s

注:使用这两个指令时,只能用于断点处运行时使用。该程序没有设置断点则不能用。

设置好断点后,输入run指令:

gdb会优先进入设置好的第一个断点,它处在第10行,所以进入第10行,这时我们采用n或s指令一步一步的往下执行。

因为是循环100次,所以会来回切换语句。


continue指令:从当前位置的断点处跳到下一个断点处

 

 


 finish指令:gdb调试器自动停止调试,并且输出最终的代码执行结果。 


p+变量指令:可以查看当前变量的数值

 

如上,进入该循环中,执行完该次循环后,使用p+变量指令就能显示当前变量的数值,但只显示一次。进入下一次循环后,还需要再使用p+变量才能再看到变量的数值变化。 

 


display +变量指令:可以一直查看该变量的数值

 

         如上,每次执行s或n指令进行循环时,gdb都会自动打印每次循环的变量sum和i的值,这个指令比上面的p+变量好很多哟~

display还可以查看变量的地址:

 

 

undisplay指令:删除之前对display变量的追踪

注:undisplay 跟的只能是变量的编号,跟其他没有用,如下:

 


 

 

 bt指令:查看当前所处函数栈帧的数据


 

delete breakpoints: 删除所有断点

delete breakpoints n: 删除序号为n的断点

disable breakpoints: 禁用断点

禁用断点并不会将该断点删掉,而是会让断点失效,断点所在代码所处痕迹仍在。

enable breakpoints: 启用断点

注:上面这些指令,若不加指定断点的编号,默认是包括所有断点的禁用,删除,启用!

 

 

 删除所有断点:

 

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

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

相关文章

时序预测 | MATLAB实现基于均方误差节点搜索优化BP神经网络的时间序列预测(多指标评价、多节点计算)

时序预测 | MATLAB实现基于均方误差节点搜索优化BP神经网络的时间序列预测(多指标评价、多节点计算) 目录 时序预测 | MATLAB实现基于均方误差节点搜索优化BP神经网络的时间序列预测(多指标评价、多节点计算)预测效果基本介绍模型描述程序设计参考资料预测效果

基于yolov5全系列模型【n/s/m/l/x】开发构建汉字检测识别系统,调整图像尺寸分别对别416x416和640x640不同分辨率下的性能结果

汉字检测对我来说不是什么新鲜的内容了,因为早在之前的时候就已经有开发过相关的项目了,感兴趣的话可以自行移步阅读即可: 《基于轻量级YOLOv5开发构建汉字检测识别分析系统》 《基于轻量级目标检测模型实现手写汉字检测识别计数》 《超轻…

港联证券|港股拥抱特专科技企业 内资券商“修炼内功”蓄势而为

港股市场新一轮改革举措渐次落地。特别是港交所推出特专科技公司上市机制,吸引符合资格的科技企业申请赴港上市,成为这一轮港股市场改革的“重头戏”。 作为香港资本市场的重要参与者,内资券商立足香港、背靠内地、辐射全球,走出一…

万国数据财报:股价暴跌51%,盈利能力下滑,万国数据前景黯淡

来源:猛兽财经 作者:猛兽财经 收入增长前景 万国数据(GDS)在3月中旬发布2022财年财务业绩时,为该公司提供了2023财年全年的收入指引。考虑到市场对万国数据的预期和其股价历史表现,猛兽财经认为&#xff0…

【zmq】ZeroMQ安装与入门案例

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍ZeroMQ的使用。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习知识,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路&…

java原生LinkedList详解

java原生LinkedList详解 实际上在IDEA,JDK环境下的LinkList底层就是一个双向链表,由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在在任意位置插入或者删除元素时,…

DMA控制两路DAC同时输出指定波形

0. 实验目标 使用 DMA 控制 DAC1 和 DAC2 同时输出不一样的波形,实验平台STM32F407ZG 1. 原理部分 1.1 DMA DMA 全称为:Direct Memory Access,即直接存储器访问。DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方式那样保…

mycat2主从配置实现读写分离

mycat2主从配置实现读写分离 在https://blog.csdn.net/zhangxue_wei/article/details/130840504基础上继续搭建 1.创建mycat数据源,可以在navcat里直接执行 1.1读数据源m1 /* mycat:createDataSource{"dbType":"mysql","idleTimeout&qu…

Cisco Secure Web Appliance Virtual 15.0 发布 - 适用于网络安全的思科高级威胁防护

Cisco Secure Web Appliance Virtual, AsyncOS for WSA 15.0.0 LD 请访问原文链接:https://sysin.org/blog/cisco-secure-web-appliance-15/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Cisco Secure Web Appli…

Windows Server 2022 中文版、英文版下载 (updated May 2023)

Windows Server 2022 中文版、英文版下载 (updated May 2023) Windows Server 2022 正式版,2023 年 5 月更新 请访问原文链接:https://sysin.org/blog/windows-server-2022/,查看最新版。原创作品,转载请保留出处。 作者主页&a…

西南交通大学智能监测 培训课程练习1

2023.05.24培训 task1:ER的用法、对应数据库的设计 task2:熟悉数据库基本操作、使用Navicat 目录 一、E-R图是什么 二、E-R图的组成要素 三、E-R图绘制 四、E-R图实例 4.1E-R图转换到关系模式 4.2具体数据表设计 五、Mysql基础操作 5.1操作数据库…

燃料电池系统控制技术的演进

背景 随着环保意识的不断提高,对清洁能源的需求也日益增加。燃料电池作为一种高效、低污染的清洁能源,受到了广泛关注和重视。与传统燃烧发电相比,燃料电池具有高效、无污染、静音等优点,可以成为未来清洁能源的主要来源之一。 …

docker拉取镜像报错Error response from daemon: Get https://registry-1.docker.io/v2/:

阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量。文章设置为仅粉丝可见,是因为写博客确实花了不少精力。希望互相进步谢谢!! 文章目录 阅读前请看一下:我是…

chatgpt赋能python:Pythonshutil.move:一个强大的文件移动工具

Python shutil.move:一个强大的文件移动工具 文件的移动和重命名是我们日常工作中经常会碰到的操作之一。Python的shutil模块提供了很多方便的工具,其中shutil.move是其中一个强大的工具,可以在文件系统中移动和重命名文件。在本文中&#x…

chatgpt赋能python:Python模型保存的完整指南:如何保存和加载模型

Python模型保存的完整指南:如何保存和加载模型 介绍 Python是一个十分强大的编程语言,它的简单易用的语法和丰富的库使其成为了机器学习开发者的首选。在机器学习领域,我们经常需要训练和保存模型,以便在实际应用中使用。本文将…

SpringCloud:(图书预约的操作)

借阅图书的操作主要是添加借阅记录: 在这张表上添加记录,并在t_book这张表上扣除库存的操作 下面我们开始进行操作: 首先我们创建t_borrow表的实体类在book项目中: package com.laosan.book.entity;import lombok.Data;import j…

成都PMP培训机构有推荐的吗?

PMP考试是不是必须要报班?自学可以考试吗?不需要报班的话,自学难度大吗?成都PMP培训机构有推荐的吗? 首先,PMP考试并非必须要报班,自学也可以考试。但是需要注意的是,PMP考试难度较大…

Centos7.9基于Kubeasz部署k8s 1.27.1高可用集群

一:kubeasz 的介绍 kubeasz 致力于提供快速部署高可用k8s集群的工具, 同时也努力成为k8s实践、使用的参考书; 基于二进制方式部署和利用ansible-playbook实现自动化;既提供一键安装脚本, 也可以根据安装指南分步执行安装各个组件。 kubea…

简单分享在微信上扫码点餐小程序怎么做

目前市场上有很多扫码点餐的小程序系统,制作方法有三种: 1、使用微信商家推出的扫码点餐小程序,上传营业执照和食品经营许可证就可以开通使用,然后上传自己的菜品信息就可以了,功能相对比较简单。 2、购买餐饮系统公司…

java链表——LinkList详解

LinkList详解 注:在学习LinkList之前可以先去看一下我的另一篇博客单链表的定义及其模拟实现——java https://editor.csdn.net/md/?articleId130642627,有助于本博客的理解 ArrayList和LinkedList的区别 LinkList模拟实现 定义三个类:MyL…