【Linux篇】gdb的使用

💛不要有太大压力🧡
💛生活不是选择而是热爱🧡

在这里插入图片描述

💚文章目录💚

    • 1. 背景知识
    • 2. 使用


1. 背景知识

image-20221004161118331

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

2. Linux下,gcc和g++编译生成的可执行程序默认是release模式

3. 要使用gdb调试,必须在debug模式下进行调试,要加上-g选项

image-20221004162046120

如果写makefile的时候 不加-g选项的话,就无法调试。(没有找到调试信息)

如果用-g选项生成了可执行文件,我们如何查看调试信息呢?

$ readelf -S mytest | grep -i debug

image-20221004163254589

image-20221004163013963

可以查看到调试信息

2. 使用

gdb mytest:进入开始调试

  1. list或l:显示mytest的源代码,后面直接回车即可(因为gdb会记住最近的一条命令,如果命令无变化,可以直接回车),每次显示十行。(默认可能不是从最开始打印)

    image-20221004164802603

  2. list或 l 0:从第一行开始显示

    image-20221004164833880

  3. list/l 函数名:列出某个函数的源代码

  4. run / r:开始调试,如果没有设置断点,就直接运行结束

    image-20221004170101809

  5. break / b 行号:给某一行打断点

    image-20221004183505585

  6. info b:查看断点

    image-20221004183538714

  7. delete / d 断点序号:删除断点

    删除断点要结合 info b来看,因为打断点的时候会自动生成断点的序号

    image-20221004183838054

    单独一个d会删除所有断点

  8. next / n:单条执行.(逐过程)

    image-20221004184833478

  9. print / p 变量:打印变量的值

    image-20221004185032786

  10. step / s:步入.(逐语句,会进入函数)

    image-20221004185605887

  11. bt:查看调用堆栈

    image-20221004185801629

  12. finish:直接运行完当前函数

    如果此时进入了一个函数,但是不想继续一步一步走了,想直接运行完这个函数,就用finish

    注意:finish只能结束main函数之外的函数

    image-20221004190146341

  13. display:长显示

    在循环中,我们时常要查看循环变量的值是多少,可以用长显示让循环变量一直显示着

    image-20221004191004344

  14. undisplay 长显示变量的编号:取消变量的长显示

    给变量长显示之后,会对应前面有一个编号

    image-20221004191325173

  15. until X行号:跳至X行

    注意:until是函数内跳转,不会调到函数外部,如果该函数在main函数中的位置是第18行,那么你输入的行数超过18行,他还是会停在18行

    image-20221004191810525

  1. continue / c :跳到下一个断点

    image-20221004193234028

    image-20221004193335281

    并且跳到下一个断点的时候,两个断点中间的代码是被执行了的

  2. disable 断点编号:禁用断点

    image-20221004195157283

  3. enable 断点编号:启用断点

    image-20221004195226499

  4. set var 变量名 = 值:设置变量的值

    image-20221004195637328

  5. 打印自定义类型 或者 数组

    p就可以做到

    image-20221004200357383

    image-20221004200422449

    可以看到,p命令直接就把自定义类型或者数组中的元素全显示出来了

✨感谢阅读~ ✨
❤️码字不易,给个赞吧~❤️

在这里插入图片描述

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

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

相关文章

VUE3中ArcGIS JsAPI 4.27 Map 隐藏地图黑色边框

问题: vue3中引入arcgis jsapi 地图加载后,点击地图会出现黑色边框,看起来很不协调 解决方案: 新建自定义CSS文件,输入一下样式内容,并在vue页面直接用import引入即可。 注意:直接写到vue页面…

10、Linux项目部署-WAR包

目录 一、部署步骤 第一步,把War包解压,再重新打包成Zip。 第二步,在Linux里创建一个项目文件夹,将Zip的内容解压在这个文件夹内。 第三步,修改Tomcat配置表 第四步,启动Tomcat 第五步,浏…

让娃学习效率更高的“可视化”时间管理器

如果要问,老母亲在娃开学后,蕞着急孩子哪一种坏习惯,那时间管理肯定榜上有名! 做作业的时候,才写了5分钟,已经没有耐心了,东摸摸西看看,一会说肚子疼想上厕所,一会又拿出…

Windows系统搭建VisualSVN并结合内网穿透实现远程访问本地服务

文章目录 前言1. VisualSVN安装与配置2. VisualSVN Server管理界面配置3. 安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4. 固定公网地址访问 前言 SVN 是 subversion 的缩写,是一个开放源代码的版本控制系统…

gin gorm学习笔记

代码仓库 https://gitee.com/zhupeng911/go-advanced.git https://gitee.com/zhupeng911/go-project.git 1. gin介绍 Gin 是使用纯 Golang 语言实现的 HTTP Web框架,Gin接口设计简洁,提供类似Martini的API,性能极高,现在被广泛使用…

《幸运的基督徒》Python

题目描述 有15个基督徒和15个非基督徒在海上遇险, 为了能让一部分人活下来不得不将其中15个人扔到海里面去, 有个人想了个办法就是大家围成一个圈,由某个人开始从1报数, 报到9的人就扔到海里面,他后面的人接着从1开始报…

XXE-XML实体注入漏洞

目录 1.xml基础 1.1什么是xml 1.2xml文档结构 1.3 什么是DTD 1.4 什么是实体 1.5 什么是外部实体 2.xxe漏洞 2.1xxe漏洞基本介绍 2.2xxe漏洞的危害 经典漏洞案例分析 3.xxe漏洞挖掘和利用 3.1. 识别潜在的XML入口 3.2. 检查XML处理逻辑 3.3. 构造试探Payload 常…

VMware永久授权终结,该如何转移阵地减少损失

2023年,随着VMware被博通(Broadcom)收购,VMware产品停止了永久订阅,仅以按年付费订阅的形式提供服务。这无疑是增加了客户在VMware的使用成本,也给VMware的未来带来众多不确定因素。 2024年2月Broadcom终止…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:PanGesture)

拖动手势事件,当滑动的最小距离超过设定的最小值时触发拖动手势事件。 说明: 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 接口 PanGesture(value?: { fingers?: number; direction?: PanDir…

List之ArrayList、LinkedList深入分析

集合 Java 集合, 也叫作容器,主要是由两大接口派生而来:一个是 Collection接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对。对于Collection 接口,下面又有三个主要的子接口&…

【Python刷题】环形链表

问题描述 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…

论文阅读:SDXL Improving Latent Diffusion Models for High-Resolution Image Synthesis

SDXL Improving Latent Diffusion Models for High-Resolution Image Synthesis 论文链接 代码链接 介绍 背景:Stable Diffusion在合成高分辨率图片方面表现出色,但是仍然需要提高本文提出了SD XL,使用了更大的UNet网络,以及增…

MyBatis的#{}和${}:安全与灵活并存的SQL之道

MyBatis的#{}和${}:安全与灵活并存的SQL之道 MyBatis是一款广泛使用的Java持久化框架,提供了强大的SQL映射和数据库操作功能。在编写MyBatis的SQL语句时,我们经常会遇到#{}和${}两种不同的占位符语法。本文将详细解析#{}和${}的区别以及它们在…

今天面了一个来字节要求月薪23K,明显感觉他背了很多面试题...

最近有朋友去字节面试,面试前后进行了20天左右,包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮面试。 其实&…

迭代器失效问题(C++)

迭代器失效就是迭代器指向的位置已经不是原来的含义了,或者是指向的位置是非法的。以下是失效的几种情况: 删除元素: 此处发生了迭代器的失效,因为erase返回的是下一个元素的位置的迭代器,所以在删除1这个元素的时候&…

JavaEE之volatile关键字

一.内存可见性问题 什么是内存可见性问题 计算机运行的程序/代码,往往需要访问数据。这些数据往往存在于内存中。 cup使用此变量时,就会把内存中的数据先读出来,加载到cpu寄存器中,再去参与运算。 但是,关键是cpu读…

MySQL 教程 2.4

MySQL UNION 操作符 本教程为大家介绍 MySQL UNION 操作符的语法和实例。 描述 MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合,并去除重复的行。 UNION 操作符必须由两个或多个 SELECT 语句组成,每个 SELECT 语句的列数…

【kubernetes】关于k8s集群如何将pod调度到指定node节点?

目录 一、k8s的watch机制 二、scheduler的调度策略 Predicate(预选策略) 常见算法: priorities(优选策略)常见的算法有: 三、k8s的标签管理之增删改查 四、k8s的将pod调度到指定node的方法 方案一&am…

P1308 [NOIP2011 普及组] 统计单词数

题目描述: 思路: 1、首先判断一下,此字符是不是字母,因为题目给出有可能有空格的存在,如果是字母,全部变成小写字母,这样方便后面比较 2、把文章全部变为字符串,用字符串数组来存&…

Pytorch学习 day05(RandomCrop、Transforms工具使用总结)

RandomCrop 将PIL或Tensor格式的输入图片,随机裁剪指定尺寸的部分输入尺寸可以为序列或单个整形数字代码如下: from PIL import Image from torchvision import transforms from torch.utils.tensorboard import SummaryWriterimg Image.open("i…