Linux调试器——gdb

news2024/11/27 2:43:31

gdb

  • 什么是gdb
  • debug与release
  • gdb的基本操作
    • 查看代码与断点
    • 执行与调试
    • 监视变量

什么是gdb

之前用的一直都是VS编译器进行调试,调试是一个非常重要的过程,在Linux中调试需要用到一个工具就是gdb。
在调试思路上VS编译器和gdb是一样的,但是调试过程的差距就很大了。
我们都知道Linux的操作都是通过命令完成的,调试也是一样的,靠的就是命令调试。

debug与release

之前在windows中用VS编译器会发现有两个模式分别是debug和release:
在这里插入图片描述
degub模式是给我们程序员使用的,方便调试代码和一些语法,比如assert函数。
release模式是给客户用的,因为客户的需求是如何使用这个软件,好不好用,而不是运行到某个阶段弹出来个报错或者是异常让客户自己调试。
相比较release模式下会优化代码,比如体积方面。
Linux环境下,gcc/g++编译出来的可执行程序默认是release模式
先来写一个程序验证一下
在这里插入图片描述
在这里插入图片描述
进入调试模式

gdb 你要调试的文件

后面的on debugging symbols found说明是release模式。
退出gdb模式按q+回车。

想让可执行程序编程debug模式就要加一个g选项。
在这里插入图片描述
然后比较一下dubug与release版本文件的大小
在这里插入图片描述
确实debug比release的大。
debug与release文件内部的区别
这里要借助一个工具来查看里面的内部文件:

readelf -S 你要查看的文件

先看release版本的:
在这里插入图片描述
debug版本:
在这里插入图片描述
这里就有dubug的调试信息。

gdb的基本操作

查看代码与断点

以下指令都是在gdb环境下进行操作。
进入gdb模式发现连个代码都不知道在哪里,这怎么调试呢?
查看代码:l
在这里插入图片描述
但是这里并不是从头开始的,l后面需要加一个数字,数字代表是从哪一行开始:
在这里插入图片描述
想继续查看直接按回车就好了:
在这里插入图片描述
最后告诉我们只有21行的代码。

在VS编译器中,我们按F9是可以进行打断点的,再按一次可以取消:
Linux进行打断点是:b 你要断点的行数
在这里插入图片描述
现在13行有一个断点,查看断点是info b:
在这里插入图片描述
断点也有自己的行,就是前面Num那一列,想删除断点可以用d 断点列表的行数:
注意不是代码中的行数,是info b中的行数!
在这里插入图片描述

执行与调试

在VS编译器中,F5是执行并且调试,Ctrl+F5是执行不调试,Shift+F5是取消调试。
在一段代码有多个断点的时候,按F5会停在一个断点上,在按一次会跑到下一个断点。
在这里插入图片描述
在这里插入图片描述
在gdb中与F5功能类似的是r:
他会在第一个断点处停下来,再按一次不会到下一个断点,而是从头开始
在这里插入图片描述
在这里插入图片描述
查看断点的时候会告诉帮你第一个断点已到达一次,也叫命中一次。
VS中F10是逐过程的运行,每次只跳过一行代码,比如调用函数的话是不会进入的,需要按F11逐语句才能进入调用的函数中查看:
gdb的逐过程:n
gdb的逐语句:s
在这里插入图片描述
n没进入函数。
在这里插入图片描述
s进入了函数。

断点跳跃:c
在这里插入图片描述
查看调用堆栈:bt
在这里插入图片描述
只想跑完当前函数,不受断点影响:finish
在这里插入图片描述

监视变量

在这里插入图片描述
进入函数之后要看到每个变量是什么:p 变量
这个操作可以让我们暂时看到变量的值
在这里插入图片描述
但是临时的肯定是不够用的们需要一个常显示才更方便。
常显示变量:display 变量
在这里插入图片描述
删除常显示变量:undisplay 监视变量列表中的序列
在这里插入图片描述
如果这个循环没问题,想跳出循环,调整至指定行:until 代码行数
跳转只会跳转到有效行数,比如你想跳转到的那一行是空行,他会自动到空行下面的第一行有效代码,如果超出了整体代码的行数,就是不合法的,无法跳转。
在这里插入图片描述

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

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

相关文章

【云原生进阶之容器】第一章Docker核心技术1.5.1节——cgroup综述

1. cgroups概述 1.1 为什么需要cgroup 在Linux里,一直以来就有对进程进行分组的概念和需求,比如session group, progress group等,后来随着人们对这方面的需求越来越多,比如需要追踪一组进程的内存和IO使用情况等,于是出现了cgroup,用来统一将进程进行分组,并在分组的…

51单片机——静态数码管实验,小白讲解

数码管介绍: 数码管是一种半导体发光器件,其基本单元是发光二极管。数码管也称LED数码管,不同行业人士对数码管的称呼不一样,其实都是同样的产品。数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多…

中国计算机大会CNCC【笔记】

中国计算机大会CNCC【笔记】前言推荐中国计算机大会CNCCCNCC 青年精英思想秀主题:当呼吸化为空气——物联网安全云原生一站式数据管理与服务 : 构建云计算数据平台生态计算产业未来应用场景与创新方向展望用开源打造云原生数据库的生态系统CCF 优博的培养与成长最后…

华为HI第二款车,阿维塔11的智能化有什么特点?

作者 | 德新 编辑 | 于婷阿维塔11,这款车不用过多介绍,长安 x 宁德 x 华为 3家联合打造。外观独特,在宝马17年的顶尖设计师Nader Faghihzadeh主导的设计;用料也很足,90度 - 116度的电池,34.99万的起售价&am…

利用 ALV 实现增删改查系列之一:让 ALV 报表进入可编辑状态试读版

在 CSDN 和我的知识星球里有朋友向我提出同样的问题,询问如何在 ALV 里实现增删改查操作。 虽然需求只有一句话,但是这个需求背后涉及到的知识点不少,因此笔者会通过几篇文章的篇幅,来介绍这个需求的详细实现步骤。 本文先解决第…

【Linux学习】之访问命令行

【Linux学习】之访问命令行 文章目录【Linux学习】之访问命令行一、基础知识二、练习1.使用 date 命令来显示当前的日期和时间。2.以12小时制显示当前时间(例如,11:42:11AM)。3. 查看/home/student/zcat 的文件类型,是否被人读取?4.使用wc命令和 Bash 快…

看过来,2022最后一期大咖说-大厂可观测来啦~

可观测性的应用创新与落地研讨会 「UGeek大咖说-大厂可观测」 最后一期 活动时间:2022/12/21 15:00 — 17:30 活动平台:线上网络直播间 主办单位:优维科技 内容介绍 白驹过隙,转眼就到了2022年末啦~ 「UGeek大咖说-大厂可观…

A. Tower(暴力 + 看数据范围)

Problem - A - Codeforces 彭教授建造了n个不同高度的积木塔。第i座塔的高度为ai。 寿教授不喜欢这些塔,因为它们的高度是任意的。他决定首先精确地移除其中的m个,然后执行以下一些(或不执行)操作。 选择一座塔,将其…

MongoDB——Java Client API(Spring Data MongoDB)

[TOC](MongoDB——Java Client API(Spring Data MongoDB)) MongoDB——Java Client API(Spring Data MongoDB) 关于文档注解 由于mongoDB使用是BSON进行存储,Java则是类与对象的概念,所以设计了一套注解用于标注 Document 范围:类 作用&…

表的增删查改基本查询(where-group by-having)

文章目录表的操作表的创建修改表属性(轻易不要改)数据类型分类类型测试表的增删查改增加插入insert插入否则更新替换Retrieve(检索)查找selectwhere条件语句的添加姓孙的和孙某where语句无法使用别名的问题?语文成绩&g…

OAK相机depthai最全上手教程

编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多👍⭐️✍ 内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。 ▌前言 Hello,大家好,这里是OAK中国,我是助手…

一种数据驱动的自动驾驶汽车前馈补偿器优化方法(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 一个可靠的控制器对于自动驾驶汽车的安全和平稳操纵的执行至关重要。控制器必须对外部干扰(如路面、天气、风况等&…

javaweb文件下载案例

html代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <a href"./img/1.jpg">图片</a> <!--这个下载效果是download实…

pikachu靶场越权漏洞实战

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是pikachu靶场越权漏洞实战。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未…

01背包问题以及有关题目

一、01背包问题详解 确定dp数组以及下标的含义 使用二维数组 dp[i] [j] 表示从下标为[0-i]的物品里任意取&#xff0c;放进容量为j的背包&#xff0c;价值总和最大是多少。 确定递推公式 dp数组的初始化 首先从dp[i][j] 的定义出发&#xff0c;如果背包容量j为0的话&#…

kobject应用实例--在/sys下创建设备的属性节点

本文讲解如何利用内核提供的接口&#xff0c;在/sys下创建设备的属性节点&#xff0c;实现属性的读写接口。 1、主要数据结构 一、kobject --> 目录&#xff1b;kobj_type --> 属性文件 使用到的内核数据结构如下&#xff1a; struct kobject {const char *name;…

1996-2020年31省主要农业机械年末拥有量相关数据

1996-2020年31省主要农业机械年末拥有量 1、时间&#xff1a;1996-2020年 2、范围&#xff1a;包括全国31省 3、指标包括&#xff1a; 农用机械总动力&#xff08;万千瓦&#xff09;、大中型拖拉机&#xff08;台&#xff09;、小型拖拉机&#xff08;台&#xff09;、大中…

jsp+ssm计算机毕业设计本科毕业设计过程管理系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

如何识别网络应用层协议?

能够标识出 Internet上每个流所使用的应用层协议是一系列网络应用的前提和基础。然而随着网络的高速化和协议的复杂化&#xff0c;传统的基于端 口识别应用层协议的算法已经不够准确&#xff0c;因此各种新的协议识别算法成为研究热点 。 本篇文章将重点介绍协议识别问题的几个…

第三章、前端知识(测试基础)---HM

文章目录一、web前端三大核心技术二、HTML基础1. HTML简介1.1 什么是HTML&#xff1f;1.2 HTML标签1.2.1 HTML单标签和双标签&#xff1a;1.3 HTML属性2. HTML标签骨架3. 基本的HTML标签3.1 HTML标题3.2 HTML段落3.3 HTML超链接3.4 HTML图片3.5 HTML空格和回车3.6 布局标签4、H…