当前位置: 首页 > news >正文

【Linux】gdb 的使用

目录

1. 使用 gdb 的前置工作

2. 如何使用 gdb 进行调试

1、如何看到我的代码

2、如何打断点 

3、怎么运行程序

4、如何进行逐过程调试

5、如何进行逐语句调试

6、如何监视变量值 

7、如何跳到指定位置

8、运行完一个函数

9、怎么跳到下一个断点

10、如何禁用/开启断点

3、小总结

写在最后:


1. 使用 gdb 的前置工作

我们先简单写一些程序:

就是一个普通的打印程序,然后, 

使用 Makefile 来自动化构建我们的项目:

这样直接 make 编译之后:

我们输入 gdb test 就能进行调试了:

但是他这里提示我们,这个可执行程序没有调试信息,

输入 quit 退出 gdb 调试。为什么会没有调试信息呢?

因为 Linux 环境下默认发行的是 release 版本。

我们需要在编译的时候添加上 -g 选项来增加调试信息到可执行程序里面:

现在完成了,我们再次使用 gdb test 进入调试状态:

发现了没,我们成功了,现在就可以开始调试了。 

2. 如何使用 gdb 进行调试

我们先写一份简单的代码,就是用于测试调试的,根据自己喜好写就行了:

我们加入调试信息运行之后,使用 gdb。

1、如何看到我的代码

输入 l + 数字,就是从第几行开始看,不过一般不会全部显示出来:

(l + 源文件名字可以指定该文件)

只要我们再输入回车,他就会继续给我们输出:

2、如何打断点 

我们可以使用 b + 行号来进行打断点:

(也可以 b + 函数名,b + mycode.c:10 指定文件行号)

那我们怎么查看断点有没有真的打上去了呢?

可以输入 info b 来进行查看:

这样就看到了,Num 表示的是断点的编号。

那怎么删除断点呢?

输入 d + 断点编号就可以删除这个断点:

3、怎么运行程序

当你打好了断点,你得把程序运行起来才能调试,那怎么运行呢?

输入 r 即可:

现在到了我们的设置在 15 行的断点,

4、如何进行逐过程调试

输入 n 可以进行逐过程调试(不进入函数)

这里要注意,如果函数里面有断点,就算用逐语句,gdb 也会停在里面,

所以这里先把在函数里的断点删掉,然后在继续 n :

我们可以看到,遇到函数就直接当做一个语句来运行了。 

5、如何进行逐语句调试

输入 s 就能进行注语句调试:

我们可以看到他进入了这个 add 函数里面。

6、如何监视变量值 

使用 p + 变量名 即可:

但是这样就输入的时候才能看一眼,能一直显示出来吗?可以,

输入 display + 变量名 即可:

这样我们继续调试的时候他就能出现在旁边了,

再使用 undisplay 就能取消观察了。

7、如何跳到指定位置

这个时候我们陷入了这个循环中,怎么样才能跳出来呢?

输入 until + 行号 就能跳到指定的行:

可以看到我们跳出了循环,来到了第 9 行。 

8、运行完一个函数

当我们不想再在这个函数里面的时候,

输入 finish 就能直接运行完当前在的函数:

他还很贴心的把返回值告诉了我们。 

9、怎么跳到下一个断点

输入 c 即可:

我们就成功从 15 行到了我们 21 行的这个断点的地方 

10、如何禁用/开启断点

使用 disable + 断点编号即可禁用断点:

使用 enable + 断点编号即可开启断点

3、小总结

这里我把我觉得常用的都总结到一起了,可以用来快速的复习:

l(列出代码)

r(运行代码)

c(继续运行)

finish(结束当前函数)

p + 变量(打印变量的值)

b + 行号(打断点)

info(查看断点)

d + 行号(删除断点)

disable/enable(禁用断点/启用断点)

display/undisplay(监视一个变量的值/取消)

until + 行号(走到该行)

n(逐过程执行)

s(逐语句执行)(会进函数)

bt(查看调用堆栈)

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

相关文章:

【Linux】gdb 的使用

目录 1. 使用 gdb 的前置工作 2. 如何使用 gdb 进行调试 1、如何看到我的代码 2、如何打断点 3、怎么运行程序 4、如何进行逐过程调试 5、如何进行逐语句调试 6、如何监视变量值 7、如何跳到指定位置 8、运行完一个函数 9、怎么跳到下一个断点 10、如何禁用/开启…...

C++11之右值引用

C11之右值引用 传统的C语法中就有引用的语法,而C11中新增了的 右值引用(rvalue reference)语法特性,所以从现在开始我们之前学习的引用就叫做左值引用(lvalue reference)。无论左值引用还是右值引用&#…...

【PHP的设计模式】

PHP的设计模式 一、策略模式二、工厂模式三、单例模式四、注册模式五、适配器模式六、观察者模式 一、策略模式 策略模式是对象的行为模式,用意是对一组算法的封装。动态的选择需要的算法并使用。 策略模式指的是程序中涉及决策控制的一种模式。策略模式功能非常强…...

React 之 Redux - 状态管理

一、前言 1. 纯函数 函数式编程中有一个非常重要的概念叫纯函数,JavaScript符合函数式编程的范式,所以也有纯函数的概念 确定的输入,一定会产生确定的输出 函数在执行过程中,不能产生副作用 2. 副作用 表示在执行一个函数时&a…...

集合转数组

首先,我们在看到集合转数组的时候可能第一个想到的就是toArray(),但是我们在调用 toArray()的时候,可能会遇到异常 java.lang.ClassCastException;这是因为 toArray()方法返回的类型是 Obejct[],如果我们将其转换成其他类型&#…...

使用Python将Word文档转换为PDF的方法

摘要: 文介绍了如何使用Python编程语言将Word文档转换为PDF格式的方法。我们将使用python-docx和pywin32库来实现这个功能,这些库提供了与Microsoft Word应用程序的交互能力。 正文: 在现实生活和工作中,我们可能会遇到将Word文…...

Java 判断一个字符串在另一个字符串中出现的次数

1.split实现 package com.jiayou.peis.official.account.biz.utils;public class Test {public static void main(String[] args) {String k"0110110100100010101111100101011001101110111111000101101001100010101" "011101100101011010100011111010111001001…...

设计模式十三:代理(Proxy Pattern)

代理模式是一种结构型设计模式,它允许通过在对象和其真实服务之间添加一个代理对象来控制对该对象的访问。代理对象充当了客户端和真实服务对象之间的中介,并提供了额外的功能,如远程访问、延迟加载、访问控制等。 代理模式的使用场景包括&a…...

Redis基础 (三十八)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、概述 1.1 NoSQL 1.2 Redis 二、安装 2.1 安装方式 : 三、目录结构 3.1 rpm -ql redis 3.2 /etc/redis.conf 主配置文件 3.3 /var/lib/redis …...

maven中的scope

1、compile:默认值,可省略不写。此值表示该依赖需要参与到项目的编译、测试以及运行周期中,打包时也要包含进去。 2、test:该依赖仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,…...

【网络基础实战之路】实现RIP协议与OSPF协议间路由交流的实战详解

系列文章传送门: 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 PS:本要求基于…...

CNN(四):ResNet与DenseNet结合--DPN

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊|接辅导、项目定制 前面实现了ResNet和DenseNet的算法,了解了它们有各自的特点: ResNet:通过建立前面层与后面层之间的“短路…...

汽车EBSE测试流程分析(四):反思证据及当前问题解决

EBSE专题连载共分为“五个”篇章。此文为该连载系列的“第四”篇章,在之前的“篇章(三)”中已经结合具体研究实践阐述了“步骤二,通过系统调研确定改进方案”等内容。那么,在本篇章(四)中&#…...

如何在Spring MVC中使用@ControllerAdvice创建全局异常处理器

文章目录 前言一、认识注解:RestControllerAdvice和ExceptionHandler二、使用步骤1、封装统一返回结果类2、自定义异常类封装3、定义全局异常处理类4、测试 总结 前言 全局异常处理器是一种 🌟✨机制,用于处理应用程序中发生的异常&#xff…...

2023/08/05【网络课程总结】

1. 查看git拉取记录 git reflog --dateiso|grep pull2. TCP/IP和OSI七层参考模型 3. DNS域名解析 4. 预检请求OPTIONS 5. 渲染进程的回流(reflow)和重绘(repaint) 6. V8解析JavaScript 7. CDN负载均衡的简单理解 8. 重学Ajax 重学Ajax满神 9. 对于XML的理解 大白话叙述XML是…...

log_softmax比softmax更好?

多类别分类的一个trick 探讨一下在多类别分类场景,如翻译、生成、目标检测等场景下,使用log_softmax的效果优于softmax的原因。 假设词典大小为10,一个词的ID为9(即词典的最后一个词),使用交叉熵作为损失函…...

[LeetCode - Python]344.反转字符串(Easy);345. 反转字符串中的元音字母(Easy);977. 有序数组的平方(Easy)

1.题目 344.反转字符串(Easy) 1.代码 class Solution:def reverseString(self, s: List[str]) -> None:"""Do not return anything, modify s in-place instead."""# 双指针left,right 0, len(s)-1while left < right:temp s[left]s[…...

【SOP】最佳实践之 TiDB 业务写变慢分析

作者&#xff1a; 李文杰_Jellybean 原文来源&#xff1a; https://tidb.net/blog/d3d4465f 前言 在日常业务使用或运维管理 TiDB 的过程中&#xff0c;每个开发人员或数据库管理员都或多或少遇到过 SQL 变慢的问题。这类问题大部分情况下都具有一定的规律可循&#xff0c;…...

带有参数的 PL/SQL 过程/函数从选择查询返回表

技术标签: 【中文标题】带有参数的 PL/SQL 过程/函数从选择查询返回表【英文标题】&#xff1a;PL/SQL Procedure/function with params to return a table from(of) a select query【发布时间】&#xff1a;2020-12-01 11:17:49【问题描述】&#xff1a; 如何创建带参数的 (…...

文件的权限

1、修改文件的所属者和所属组 2、修改文件某一类人&#xff08;所属者、所属组、其他人&#xff09;的权限 一、用户对于普通文件的权限 二、用户对于目录文件的权限 三、访问控制列表ACL 四、特殊权限&#xff08;了解&#xff09; wuneng创建了几个文件&#xff0c;xiaoming对…...

vue3集成echarts最佳实践

安装 echarts npm install echarts --save 两种引用方式 非虚拟 dom import * as echarts from echarts;var chartDom document.getElementById(mychart); var myChart echarts.init(chartDom); var option;option {title: {text: Referer of a Website,subtext: Fake Da…...

一位年薪40W的测试被开除,回怼的一番话,令人沉思

一位年薪40W测试工程师被开除回怼道&#xff1a;“反正我有技术&#xff0c;在哪不一样” 一技傍身&#xff0c;万事不愁&#xff0c;当我们掌握了一技之长后&#xff0c;在职场上说话就硬气了许多&#xff0c;不用担心被炒&#xff0c;反过来还可以炒了老板&#xff0c;这一点…...

网络适配器和MAC地址

点对点信道&#xff1a;由于目的地只有一个选项&#xff0c;所以数据链路层不需要使用地址。 而在广播信道中&#xff1a; 各个主机如何判断信号是不是发给自己的&#xff1f; 当多个主机连接在同一个广播信道上&#xff0c;要想实现两个主机之间的通信&#xff0c;则每个主机都…...

react-player静音不能自动播放问题

现象 移动端不能自动播放 原因 取决于您使用的浏览器&#xff0c;但muted如果您不想与autoplay用户交互&#xff0c;则必须使用视频。 Chrome 的自动播放策略很简单&#xff1a; 始终允许静音自动播放。在以下情况下允许自动播放声音&#xff1a; 用户与域进行了交互&#x…...

培训Java技术要多久才能学会?答案都在这里啦

培训Java技术要多久才能学会?这是想学习Java开发的很多人都会问到的一个问题。而这个问题的答案其实并不是那么简单&#xff0c;因为学Java的时间长短受到众多因素的影响。本文将从个人基础、学习动力和学习效率三个方面来为您解答这个问题。 1. 个人基础 自己的基础对于学习…...

Java中使用HttpPost发送form格式的请求

在Java中使用HttpPost发送form格式的请求&#xff0c;可以使用Apache HttpClient库来实现。以下是一个示例代码&#xff1a; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client…...

C语言----字节对齐

一&#xff1a;字节对齐的概念 针对字节对齐&#xff0c;百度百科的解释如下&#xff1a; 字节对齐是字节按照一定规则在空间上排列&#xff0c;字节(Byte)是计算机信息技术用于计量存储容量和传输容量的一种计量单位&#xff0c;一个字节等于8位二进制数&#xff0c;在UTF-8编…...

Next.js入门介绍(服务端渲染)

Next.js 一 目录 不折腾的前端&#xff0c;和咸鱼有什么区别 目录一 目录二 前言三 设置四 多页面五 链接六 样式七 共享组件八 布局组件九 实战 9.1 目录结构 9.2 UI 组件 9.3 Markdown 内容 9.4 Pages 入口和 API  9.4.1 服务端渲染 9.5 Public 静态资源 9.6 resor…...

模板Plus

文章目录 1.非类型模板参数的引入2.标准库和普通数组3.模板的特化 1.非类型模板参数的引入 //非类型模板参数 -- 常量 template<class T, size_t N 10> class array { private:T _a[N]; };int main() {array<int> a1;array<int, 100> a2;array<double, …...

spring事务和数据库事务是怎么实现

Spring事务的原理 Spring事务的本质其实就是数据库对事务的支持&#xff0c;没有数据库的事务支持&#xff0c;spring是无法提供事务功能的。对于纯JDBC操作数据库&#xff0c;想要用到事务&#xff0c;可以按照以下步骤进行&#xff1a; 获取连接 Connection con DriverManag…...

青岛网站设计哪家好/做推广

具体伪代码如下&#xff1a;/*** 我把这一步封装成一个函数&#xff0c;以后再调用那些需要登录后才有权限访问的后台服务时.* 可以使用使用这个函数操作,基本逻辑&#xff0c;还可以进行扩展* url : 开发者服务器登录服务接口 可设置默认值* key : 存入本地缓存的第…...

微信端网站开发流程/网站推广和优化系统

1.线性最小二乘法曲线拟合问题的提法是&#xff0c;已知一组(二维)数据&#xff0c;即平面上的个点&#xff0c;&#xff0c;互不相同&#xff0c;寻求一个函数(曲线)使在某种准则下与所有数据点最为接近&#xff0c;即曲线拟合得最好。线性最小二乘法是解决曲线拟合最常用的方…...

前端做任务的网站/百度seo关键词

项目介绍 一款 Java 语言基于 SpringCloud、Vue、ElementUI、MySQL等框架精心打造的一款前后端分离框架&#xff0c;致力于实现模块化、组件化、可插拔的前后端分离架构敏捷开发框架&#xff0c;可用于快速搭建前后端分离后台管理系统&#xff0c;本着简化开发、提升开发效率的…...

做农家乐网站/小程序自助搭建平台

命令模式(Command Pattern)&#xff1a;将一个请求封装为一个对象&#xff0c;从而使我们可用不同的请求对客户进行参数化&#xff1b;对请求排队或者记录请求日志&#xff0c;以及支持可撤销的操作。 命令模式包含如下角色&#xff1a; Command(抽象命令类):一般是一个接口&am…...

wordpress 分页函数/怎么在网上做推广

整个项目包含了&#xff1a;开题报告 开题报告PPT 任务书 中期报告 论文模板 答辩PPT等 项目源码 主要安介绍了系统在开发过程中所应用到的一些关键的技术&#xff0c;主要包括了前端小程序开发的MINA框架&#xff1b; 后台开发PHP技术&#xff1b;MySQL数据库&#xff…...

专业做网站建设的/泉州百度推广咨询

脚本几天不练会很生疏&#xff0c;以后每天最少练习一个脚本。。 2012.10.12 昨天写的关于一个时间的脚本总是出错&#xff0c;郁闷咯。。。 201210.29转载于:https://blog.51cto.com/inspriion/1021670...