gdb使用

news2024/9/22 19:36:16

gdb是一款UNIX及UNIX-like下的调试工具

gdb可用于调试用gcc编译的可执行文件,用gdb调试时gcc编译需要使用参数-g

本文是对于gdb在Linux下使用的基本命令的总结gdb调试视频演示,gdb调试基础指令,gdb调试其他命令,gdb常见错误说明

目录

gdb调试视频演示

gdb调试基础指令

gdb调试其他命令

gdb常见错误说明


gdb调试视频演示 

视频中使用gdb调试一个文件,下面有视频中命令的介绍,帮助大家直观理解一下GDB调试

GDB调试

视频中

l是list,列出代码

可以看出每行代码有行号,需要b+行号命令,给程序打断点,这样程序就会停止在断点位置

打好断点后,使用run命令,程序将运行到断点处停下来

我们可以从断点开始一行一行执行代码

两种单步运行命令

s是step,如果一行代码是函数的话,会进入函数

n是next,如果这一行代码是函数的话,不会进入这个函数,会运行本函数的下一条命令

continue可以运行断点之后的命令

我们这样断点调试一个程序,就是为了查看一下程序在运行过程中变量存储的数值,可以使用命令p+变量,打印变量在运行过程中存储的值

quit命令可以退出调试

gdb调试基础指令

1.gcc检查语法错误

2.-g 使用该参数编译可以执行文件,得到调试表

gcc -g main.c -o main(加了-g才能用gdb)

3.gdb检查逻辑错误

4.gcc 文件名.c -o gdbtest

5.gcc 文件名.c -o gdbtest2 -g

6.gcc gdbtest.c -o a.out -g 编译

gdb a.out 进入调试

在(gdb)后面加“l”或者“list”

在(gdb)后面加“list 1”,使得从第一行开始显示十行,再在(gdb)后面再写”l“,会出现后续的行

7.设置断点

在gdb后面输入“break”和“b”

e.g

b 52

8.(gdb)后输入run,执行程序到断点处,断点处语句没有执行

(gdb)后面输入“s”或“step”,下一条命令,不会越过函数

(gdb)后面输入“n”或“next”,下一条命令,会越过函数

9.如果函数是系统函数只能用“n“,不能用”s”

10.until 循环次数 可以退出循环

11.p 变量

print 变量

可以查看变量

12.continue

继续执行断点后续命令

13.quit:退出gdb当前调试

gdb调试其他命令

1.用gdb调试查找段错误出现位置

段错误是访问了不可访问的内存

用gdb打开一个程序,直接“run”,程序停下的位置就是段错误的位置

2.start

默认从当前程序第一行开始运行

3.finish 可以结束当前函数调用,回到函数的调用点

4.set args 设置main函数命令行参数

可以有带参数的main函数,在“./文件名”后面加上参数

在(gdb)后面加上“set args 参数 参数”(要设置在start之前),可以加入参数

5.run 参数 参数2,设置main函数参数

6.display 

display命令查看变量或表达式的值,每当程序暂停执行(例如单步执行)时,GDB 调试器都会自动帮我们打印出来,而 print 命令则不会。

7.info b 查看断点信息

8.条件断点:b 行号 if 变量=数据

e.g b 20 if i=5

一般用于循环

9.ptype 变量 查看变量类型

在子函数中不能查看没有通过参数传入子函数的变量

10.栈里面存放栈帧

栈帧是随着函数调用而在stack上开辟的一片内存空间,用于存放函数调用时时产生的局部变量和临时值

kernel(内核数据)
环境变量,main参数
stack(栈)
.so加载位置
heap(堆)
.bss
.data
.rodata(只读数据段)
.text(代码段)

有一个函数调用就会产生一个栈帧,调用结束,栈帧消失

如果想彻底理解栈帧有关机制的话,可以学习一下汇编语言

调用子函数main函数的栈帧不会消失,因为main函数没有结束

子函数栈帧中有形参和局部变量,子函数调用结束,子函数栈帧消失

11.利用指针可以在一片栈帧去修改另一片栈帧的值

12.backtrace:查看函数调用的栈帧和层级关系

frame:根据栈帧编号切换栈帧

bt:查看栈帧(#后面的是栈帧号)

frame 栈帧号

13.display 变量 设置跟踪变量

undisplay 变量 取消设置跟踪变量

gdb常见错误说明

常见错误

编译没有加“-g”

用gdb打开文件

list会出现 没有符号被读取,请使用“file”命令

解决方法

1.quit,重新编译

2.file a.out(a.out必须经过gdb调试)

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

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

相关文章

23种设计模式(二十一)——命令模式【行为变化】

文章目录 意图什么时候使用命令真实世界类比命令模式的实现命令模式的优缺点亦称:动作、事务、Action、Transaction、Command 意图 将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递…

Centos7 Docker安装APISIX

Centos7 Docker安装APISIX1 基础介绍1.1 概念1.2 特性1.3 架构图2 快速安装2.1 前提条件2.2 安装步骤2.2.1 git命令克隆apisix-docker仓库2.2.2 docker-compose启动apisix2.2.3 访问apisix dashboard3 简单使用3.1 准备接口3.2 创建服务3.3 创建路由3.4 测试请求1 基础介绍 1.…

Kubernetes:分享一个很简洁的 k8s 管理工具 Skooner

写在前面 博文内容为 Skooner 简单介绍包括下载安装导入集群基本功能使用Skooner 的 sa 使用的当前命名空间默认的 sa不会显示创建 sa ,当然可以单独创建理解不足小伙伴帮忙指正 我所渴求的,無非是將心中脫穎語出的本性付諸生活,為何竟如此艱難呢 -----…

Spring_FrameWork_10(MyBatisPlus)

lombok mybatis:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplTestvoid selectById(){IPage page new Page(2,2);bookDao.selectPage(page,null);System.out.println("当前页码值:"page.getCurrent());System.out.println…

Java---微服务---Nacos集群搭建

Nacos集群搭建1.集群结构图2.搭建集群2.1.初始化数据库2.2.下载nacos2.3.配置Nacos2.4.启动2.5.nginx反向代理2.6.优化1.集群结构图 官方给出的Nacos集群图: 其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。 我们…

解锁Windows所有电源选项

20230123 By wdhuag 目录 参考: 查看当前选项: 警告!修改前,先使用Registry Workshop备份注册表,导出PowerSettings: 在PowerSettings里增加Attributes参数(十六进制、数值2)&a…

Shell脚本从入门到实战

Shell 文章目录Shellshell概述Shell脚本入门1. 脚本格式2. 第一个Shell脚本:helloworld3. 第二个Shell脚本:多命令处理Shell中的变量系统变量1. 常用系统变量2. 案例实操自定义变量1. 基本语法2. 变量定义规则特殊变量:$n特殊变量:$#特殊变量…

零基础学JavaWeb开发(二十二)之 springmvc入门到精通

一、SpringMVC概述 1、三层架构与MVC架构区别 1.1、三层架构 表示层:主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问。 servlet层 业务逻辑层:对我们数据实现业务逻辑的封装 service层 数据访问层&#xf…

【Java|golang】2303. 计算应缴税款总额

给你一个下标从 0 开始的二维整数数组 brackets &#xff0c;其中 brackets[i] [upperi, percenti] &#xff0c;表示第 i 个税级的上限是 upperi &#xff0c;征收的税率为 percenti 。税级按上限 从低到高排序&#xff08;在满足 0 < i < brackets.length 的前提下&am…

【JavaScript】多态(Symbol),迭代器接口,getter/setter

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录多态symbol迭代器接口实现数组的迭代器方法练习Getter/Setter多态 我拿到一个对象&#xff0c;这…

【JavaScript】正则表达式详解

&#x1f4bb;【JavaScript】正则表达式&#x1f3e0;专栏&#xff1a;JavaScript &#x1f440;个人主页&#xff1a;繁星学编程&#x1f341; &#x1f9d1;个人简介&#xff1a;一个不断提高自我的平凡人&#x1f680; &#x1f50a;分享方向&#xff1a;目前主攻前端&#…

MySQL(五):事务简介、事务的特性、事务的概念及状态、支持事务的引擎

目录一、事务的起源二、事务的特性2.1 原子性(Atomicity)2.2 隔离性(Isolation)2.3 一致性(Consistency)2.4 持久性(Durability)三、事务的概念及状态四、支持事务的引擎一、事务的起源 事务源于日常生活中的业务&#xff0c;现有这样的一个场景&#xff0c;A账户有11元&#…

人工智能学习06--pytorch04--transforms

transforms主要对图片进行一些变换 transform该如何使用&#xff08;python&#xff09; 从transform中选择一个class&#xff0c;进行创建 依据创建的工具看需要什么&#xff08;如img&#xff09; 为什么需要tensor的数据类型 tensor数据类型&#xff1a;包装了神经网络…

opencv win10 4.7.0 源码编译 vs2019 cmake

下载opencv & opencv-contrib 4.7.0源码&#xff1b;注意下载地址https://github.com/opencv/opencv/releases https://github.com/opencv/opencv_contrib/releases/tag/4.7.0 版本要一模一样cmake输出文件夹为&#xff1a;opencv-4.7.0-build 遇到下载问题如下&#xf…

常见递归模式

常见递归模式递归模式遍历二叉树模式回溯模式子问题分解模式递归模式 常见递归模式&#xff1a; 遍历二叉树模式回溯模式子问题分解模式 遍历二叉树模式 只要涉及递归的问题&#xff0c;都是树的问题&#xff0c;或者说树的遍历。 void traverse(TreeNode root) { // 遍历…

混合背包问题

混合背包问题一、问题二、分析三、代码一、问题 二、分析 混合背包问题就是将我们之前讲过的01背包&#xff0c;完全背包&#xff0c;分组背包&#xff0c;多重背包问题等等中的任意几个混合在一起。因此想要解决这个问题&#xff0c;就需要对01背包&#xff0c;完全背包&…

PDF划词翻译软件

PDF划词翻译 一个简单的PDF划词翻译软件。 Github仓库地址&#xff1a;https://github.com/WCX1024979076/simple_pdf_translator Github下载地址&#xff1a; https://github.com/WCX1024979076/simple_pdf_translator/releases/tag/v0.1.0 Gitee仓库地址&#xff1a; htt…

ROS2机器人编程简述humble-第三章-COMPUTATION GRAPH .2

ROS2机器人编程简述humble-第三章-PERCEPTION AND ACTUATION MODELS .1避开障碍物计算图如何呢&#xff1f;该应用程序的计算图非常简单&#xff1a;订阅激光主题的节点向机器人发布速度命令。控制逻辑解释&#xff1a;输入的感知信息并产生控制命令&#xff08;输出&#xff0…

深度学习:DenseNet思想总结

深度学习&#xff1a;DenseNet思想总结前言DenseNetResNetDense connectionComposite functionPooling layersGrowth rateBottleneck layersCompressionImplementation Details总结前言 论文中提出的架构为了确保网络层之间的最大信息流&#xff0c;将所有层直接彼此连接。为了…

JUC面试(八)——阻塞队列

阻塞队列 队列&#xff0c;FIFO BlockingQueue 阻塞队列&#xff0c;排队拥堵&#xff0c;首先它是一个队列&#xff0c;而一个阻塞队列在数据结构中所起的作用大致如下图所示&#xff1a; 线程1往阻塞队列中添加元素&#xff0c;而线程2从阻塞队列中移除元素 当阻塞队列是空…