Linux调试器gdb

目录

一、关于Linux调试器gdb

二、gdb的操作

1、quit

2、l

3、r

4、b+行号

info b

5、d+断点编号

6、n

7、p+[变量名]

8、s

9、bt

10、finish

11、display+[变量名]

12、until+行号

13、c

14、disable/enable+断点编号


一、关于Linux调试器gdb

首先,我们的gcc/g++默认形成的可执行程序是release的,所以没有办法直接进行调试

如果直接使用gcc/g++编译出来的可执行文件进行gdb,就会出现如下问题:

先gcc test.c -o test,形成可执行程序test

然后gdb test会出现如下提示:不是debug,无法调试

如果想变为debug,则gcc时后面加上-g选项,输入gcc test.c -o test -g即可

gcc时加上-g选项后,gdb [可执行程序]就能进入调试,准备工作就完成了


读取可执行程序的数据段格式readelf -S [可执行程序]

如果想找有关可执行程序的debug信息,和管道以及grep结合使用,即可观察到


二、gdb的操作

gdb会记录最近一条命令,如果命令不变化,可以直接回车会自动执行最近一次输入的命令

1、quit

quit是退出调试

进入gdb后,如果想退出输入quit即可


2、l

l是显示代码,是list的简写

如果想更清楚的看代码,l 0就表示从第一行开始显示代码


3、r

r是直接开始调试,如果没有设置断点,则直接运行结束

如果有断点,则在断点处停下来


4、b+行号

b+行号可以给特定的行打断点,b是breakpoint的简写

info b

info b是查看断点

继续添加断点并查看断点


5、d+断点编号

d+断点编号是删除断点,d是delete的简写

断点编号即info查看断点时,最左边的Num


6、n

n是在调试中逐过程执行,是next的简写

从上图可以清楚看到打断点后,执行r,程序会在断点处17行停下来,接着一直执行n:逐过程,直到程序执行完毕


7、p+[变量名]

p+[变量名]是打印变量内容

在执行了第18行后,p rst就可以看到rst现在的值时15


8、s

s是调试中逐语句执行,s是step的简写

首先看一下这个代码,是有一个Add函数的

我们在17行打了断点,在执行到18行时,想进入这个Add函数,这时输入s即可进入:

然后即可继续n或s调试代码


9、bt

bt是查看调用堆栈的

即栈顶是正所处的函数Add,栈底是main函数


10、finish

finish是将当前函数跑完就停下来

当我们逐语句走到函数Add里了,想直接跑完这个Add函数,直接输入finish:

这时再bt调用堆栈,发现已经没有Add函数了


11、display+[变量名]

display+[变量名]是给这个变量名长显示

当我们正常调试时,什么变量都没有,这时我们想观察i的值,并且接下来每一次逐语句执行都显示i,则display i即可,如果还想看变量num,再displaynum即可

这时我们不想看num了,undisplay+[显示编号],例如num是编号2,则输入undisplay 2,就在接下来的调试中就不会长显示num了,只会显示i的值


12、until+行号

until+行号是跳转到指定行

 如果执行到循环里,想从循环跳出来,

例如我们在第9行执行while循环,想直接跳到12行,until 12即可


13、c

c是运行到下一个断点处就停下来,c是continue的简写

17行和19行都有一个断点,c可以直接从17行断点处到第19行断点处


14、disable/enable+断点编号

 disable/enable+断点编号是打开和关闭断点

关闭断点意思就是断点依然存在,但是不起任何作用

如上图可以清楚看到disable 1即关闭断点编号为1的断点后,在查看断电时End下面的y变为n,这时表示关闭断点

如果想再打开断点,就是enable+断点编号

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

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

相关文章

简简单单教你如何用C语言实现获取当前所有可用网口!

一、获取本机所有可用网卡名 原理: 在 Linux 系统中,/proc 目录是一个位于内存中的伪文件系统。 /proc目录是内核提供给我们的查询中心,通过查询该目录下的文件内容,可以获取到有关系统硬件及当前运行进程的信息,如…

全栈工程师必须要掌握的前端CSS技能

作为一名全栈工程师,在日常的工作中,可能更侧重于后端开发,如:C#,Java,SQL ,Python等,对前端的知识则不太精通。在一些比较完善的公司或者项目中,一般会搭配前端工程师&a…

海外商城小程序如何开发

随着全球化的发展和人们对跨境购物的需求逐渐增加,海外商城小程序成为了众多电商平台的重要组成部分。本文将深入探讨如何搭建海外商城小程序,从技术实现到用户体验设计,为开发者提供专业且有深度的思考,以帮助他们打造出色的跨境…

U3D外包开发框架及特点

U3D(Unity3D)是一款流行的跨平台游戏开发引擎,用于创建2D和3D游戏以及交互性应用程序。U3D有许多常用的开发框架和库,这些框架和库可以扩展其功能,使开发人员更轻松地构建游戏和应用程序。以下是一些常用的U3D开发框架…

【校招VIP】测试技术考点之单元测试集成测试

考点介绍: 单元测试,集成测试的区别是:方式不同、粒度不同、内容不同。单元测试用用于验证编码单元的正确性。集成测试用于验证详细设计。体现了测试由小到大、又内至外、循序渐进的测试过程和分而治之的思想。 测试技术考点之单元测试&集成测试-相…

C#进阶 多个泛型约束

using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine;public class A02_Generic : MonoBehaviour {[ContextMenu("测试Start")]// Start is called before the first frame updatevoid Start(){Person…

Linux编辑器-vim使用

文章目录 前言一、vim编辑器1、vim的基本概念2、vim的基本操作2.1 命令模式切换至插入模式2.2 插入模式切换至命令模式2.3 命令模式切换至底行模式 3、vim命令模式命令集3.1 移动光标3.2 删除文字3.3 复制与粘贴3.4 替换3.5 撤销上一次操作3.6 更改3.7 跳至指定的行 4、vim末行…

织密安全防线——记建行江门市分行推进反洗钱工作

建行广东省江门市分行多层次织密反洗钱防线,持续护航高质量发展。 健全架构 建行江门分行成立以“一把手”为组长的反洗钱工作领导小组。通过在部门、支行、网点层面分别设置反洗钱合规官、合规专员、情报专员、合规员等岗位,层层织密反洗钱防线。持续加…

【算法基础】时间复杂度和空间复杂度

目录 1 算法的评价 2 算法复杂度 2.1 时间复杂度(Time Complexity) 2.1.1 如何计算时间复杂度: 2.1.2 常见的时间复杂度类别与示例 2.2 空间复杂度 2.2.1 如何计算空间复杂度 2.2.2 常见的空间复杂度与示例 3 时间复杂度和空间复杂度…

opencv识别一张图片的多个红框,并截取红框的内容

需求 需要获取图片的红框的内容,实体的图片我就不放了 获取红框 先截取获得图片的多个轮廓 import cv2 import numpy as np # 加载图像并转换为灰度图像 image cv2.imread(image6.jpg) gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 应用高斯模糊以减…

【算法】反悔贪心

文章目录 反悔贪心力扣题目列表630. 课程表 III871. 最低加油次数LCP 30. 魔塔游戏2813. 子序列最大优雅度 洛谷题目列表P2949 [USACO09OPEN] Work Scheduling GP1209 [USACO1.3] 修理牛棚 Barn RepairP2123 皇后游戏(🚹省选/NOI− TODO) 相关…

Anaconda彻底卸载及重安装

一、彻底卸载Anaconda 1.1 先采用anaconda-clean包初步卸载 总体卸载思路:通过下载anaconda-clean包完成初步卸载,但由于在base下若下载anaconda-clean包会一直卡在Solving environment:阶段,因此首先要创建一个虚拟环境。具体步骤如下&…