【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命令直接就把自定义类型或者数组中的元素全显示出来了

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MybatisPlus】QueryWrapper、UpdateWrappe、LambdaQueryWrapper、LambdaUpdateWrapper

一、Wrapper简介 QueryWrapper、UpdateWrapper、LambdaQueryWrapper 和 LambdaUpdateWrapper 都是 MyBatis-Plus 框架中用于构建条件的工具类,它们之间的关系是继承关系。其中 QueryWrapper 和 UpdateWrapper 是基于普通的对象属性名来构建条件的,而 La…

mongo用命令将csv导入导出数据表

1、准备csv数据 2、新建数据库 数据库名:POIDB,用Robo数据库可视化软件操作的 3、命令行导入csv文件 命令模板 mongoimport --db mydatabase --collection mycollection --type csv --headerline --file data.csv导入kword文件命令,数据…

相机标定实验

相机标定 文章目录 相机标定1 ROS标定1.1安装标定程序1.2 下载标定板1.3 标定1.4 标定结果 2 Kalibr相机标定2.1 下载官方提供的标定板2.2 自定义标定板2.3 cam数据录制2.4 标定2.5 输出结果 3 MATLAB标定3.1 打开工具3.2 添加标定板图片3.3 设置标定参数3.4 生成标定结果3.5 标…

【网络原理】初识网络原理

目录 🎄网络发展史🌸独立模式🌸网络互连🌻局域网LAN🌼基于网线直连🌼基于集线器组建🌼基于交换机组建🌼基于交换机和路由器组建 🌻广域网WAN 🌳网络通信基础&…

如何在小程序中绑定身份证

在小程序中绑定身份证信息是一项常见的需求,特别是在需要进行实名认证或者身份验证的场景下。通过绑定身份证信息,可以提高用户身份的真实性和安全性,同时也为小程序提供了更多的个性化服务和功能。下面就介绍一下怎么在小程序中绑定居民身份…

position定位学习

加了绝对定位的盒子不能通过margin:0 auto水平居中 脱标元素不会产生外边距合并问题

vue svelte solid 虚拟滚动性能对比

前言 由于svelte solid 两大无虚拟DOM框架,由于其性能好,在前端越来越有影响力。 因此本次想要验证,这三个框架关于实现表格虚拟滚动的性能。 比较版本 vue3.4.21svelte4.2.12solid-js1.8.15 比较代码 这里使用了我的 stk-table-vue(np…

Vue3实现页面跳转功能

目标: 首页: 点击About后: 第一步:安装 Vue Router和创建你先 npm install vue-router4第二步:在router.js中设置路由 import { createRouter, createWebHistory } from vue-router; import Home from ./views/Home…

HTML超详细简介

HTML是什么 超文本标记语言(HyperText Mark-up Language )用来设计网页的标记语言用该语言编写的文件,以 .html或 .htm为后缀由浏览器解释执行不区分大小写,建议小写 HTML标签 HTML用于描述功能的符号成为“标签”标签都封装在…

b站小土堆pytorch学习记录—— P25-P26 网络模型的使用和修改、保存和读取

文章目录 一、修改1.方法2.代码 二、保存和读取1.方法2.代码(1)保存(2)加载 3.陷阱 一、修改 1.方法 add_module(name: str, module: Module) -> None name 是要添加的子模块的名称。 module 是要添加的子模块。 调用 add_m…

部署SpringBoot项目

方案一:纯手工部署 1,购买一台云服务器 这里我使用腾讯云,推荐Centos8/Centos7.6 2,安装springBoot项目所需要的环境 1,数据库单独安装在另一台服务器上,只需要修改IP地址即可 2,安装jdk yum…

泛型 --java学习笔记

什么是泛型 定义类、接口、方法时&#xff0c;同时声明了一个或者多个类型变量&#xff08;如&#xff1a;<E>&#xff09;&#xff0c;称为泛型类、泛型接口&#xff0c;泛型方法、它们统称为泛型 可以理解为扑克牌中的癞子&#xff0c;给它什么类型它就是什么类型 如…

如何将中科方德桌面操作系统加入Windows域

往期文章&#xff1a;自定义SSH客户端连接时的显示信息 | 统信UOS | 麒麟KYLINOS Hello&#xff0c;大家好啊&#xff0c;今天我非常高兴地给大家带来一篇关于如何将中科方德桌面操作系统加入Windows域的教程文章。对于使用中科方德桌面操作系统的用户来说&#xff0c;将其加入…

TSINGSEE配电房/配电站/变电站远程视频智能监管、无人值守方案

一、背景需求分析 随着社会的快速发展和科技进步&#xff0c;电力作为现代社会的核心驱动力&#xff0c;其稳定运行与安全管理变得愈发重要。特别是在配电房这一关键环节中&#xff0c;实施高效的远程视频智能监管方案&#xff0c;不仅能够有效提升电力供应的可靠性&#xff0…

模拟实现std::string类(包含完整、分文件程序)

std库中的string是一个类&#xff0c;对string的模拟实现&#xff0c;既可以复习类的特性&#xff0c;也可以加深对std::string的理解。 &#x1f308;一、搭建框架 ☀️1.新命名空间 本质上string是一个储存在库std里面的类&#xff0c;现在需要模拟实现一个string类&#…

Linux:kubernetes(k8s)探针ReadinessProbe的使用(9)

本章yaml文件是根据之前文章迭代修改过来的 先将之前的pod删除&#xff0c;然后使用下面这个yaml进行生成pod apiVersion: v1 # api文档版本 kind: Pod # 资源对象类型 metadata: # pod相关的元数据&#xff0c;用于描述pod的数据name: nginx-po # pod名称labels: # pod的标…

好物周刊#46:在线工具箱

https://github.com/cunyu1943 村雨遥的好物周刊&#xff0c;记录每周看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;每周五发布。 一、项目 1. twelvet 一款基于 Spring Cloud Alibaba 的权限管理系统&#xff0c;集成市面上流行库&#xff0c;可以作用为快…

【电路笔记】-NPN晶体管

NPN晶体管 文章目录 NPN晶体管1、概述2、双极NPN晶体管配置3、NPN晶体管中的α和β关系4、示例5、共发射极配置1、概述 NPN 晶体管是三端三层器件,可用作放大器或电子开关。 在前面的文章中,我们看到标准双极晶体管或 BJT 有两种基本形式。 NPN(负-正-负)配置和PNP(正-负…

稀碎从零算法笔记Day11-LeetCode:有效的字母异位词

题型&#xff1a;字符串、哈希表、排序 链接&#xff1a;242. 有效的字母异位词 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 …

电子签名签章:重塑企业办公方式,开启智能合约新时代!

在现代社会&#xff0c;随着科技的发展&#xff0c;纸质文件逐渐被电子文件所取代&#xff0c;传统的签名方式也面临着数字化的转型。电子签名签章云服务就是在这样的背景下应运而生的一种新型技术服务&#xff0c;它结合了云计算、大数据、人工智能等前沿技术&#xff0c;为用…