【Linux工具篇】调试器gdb

news2024/9/23 13:27:18

目录

releaseVSdebug模式

使用命令

NO1运行

NO2查看

NO3断点

总结


releaseVSdebug模式

  • 程序的发布方式有两种,debug模式和release模式
  • Linux gcc/g++出来的二进制程序,默认是release模式
  • Linux gcc/g++要使其debug模式编译,加上-g选项
  • 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项 
  • debug模式:编译器形成可执行程序的时候,会给可执行程序添加调试信息!
  • debug模式可以被调试
  • release模式不可被调试
  • 用户使用都是release版本,测试测得是release版本

【对比1】

【对比2】

readelf -S process.c-debug | grep -i debug
readelf -S process.c | grep -i debug

使用命令

sudo yum -y install gdb
//没安装gdb的小伙伴安装下
  • 打断点(确定bug范围)
  • 启用run到进入范围
  • 启用next / step 逐过程/逐语句调试;step进入函数调试
  • run / countinue:是重新和从当前位置开始调试
  • finish是跳过函数停止(只执行函数)
  • until X是结束循环调试 
  • 调试过程中查看变量信息

NO1运行

  • gdb 可调式文件(含调试信息):开始启动调试。
  • quit(q)/ ctrl+d :退出调试(结束调试)。
  • run(r):运行程序。从开始连续而非单步执行程序。从头开始,有断点停下F5
  • continue(c):从当前位置开始连续而非单步执行程序。(从当前位置开始,会直接执行完函数)。
  • next(n):单条执行,逐过程(≈F10)(把函数当成一条语句执行完成)。
  • step(s):进入函数调用,逐语句(≈F11)。
  • finish:执行到当前函数返回,然后停止下来等待命令。
  • until X(行号):从当前位置跳转至X行号。(执行完X行号以前得程序)
  • 所有的命令必须在run之后才能启用,run在遇到断点才会停下,不然会直接执行完成。

NO2查看

  • list / l 行号:显示源代码,从头开始只显示10行。重复输入:接着上次的位置往下显示
  • list 15:15不会在开头,在中间位置,gdb会把要查看15的内容上下文全部展示出来。
  • list / l 函数:显示某个函数的源代码
  • info break:查看断点信息
  • info(或i) breakpoints:参看当前设置了哪些断点(同上)
  • print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
  • p 变量:打印变量值
  • p {变量1,变量2}:查看多个变量
  • set var 变量=修改后的值:修改变量值(一般用于判断条件/判断语句)
  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay :取消对先前设置的那些变量的跟踪
  • breaktrace(或bt):查看各级函数调用及参数
  • info(i) locals:查看当前栈帧局部变量的值

NO3断点

  • break(b)行号:在某一行设置断点。
  • break 函数名:在某个函数的开头设置断点。
  • delete breakpoints(断点编号):删除所有断点
  • delete breakpoints (断点序号):删除序号为n的断点
  • disable breakpoints(断点编号):禁用断点
  • enable breakpoints(断点编号):启用断点
  • 注意如果不结束调试,假设只有序号1断点,删除序号1断点,再次打断点序号从2开始,不是从1开始。断点编号在没有退出调试之前是一个增长的计数器

 

总结

  • 创建项目test-debug
  • gdb -g test-debug:开始调试
  • ctrl + d 或者 quit(q) :退出调试
  • list/l 行号:显示test-debug源代码,接着上次的位置往下列,每次列10行。
  • list/l 函数名:列出某个函数的源代码。
  • r或run:运行程序。再次重新运行程序
  • n 或 next:单条执行。
  • s或step:进入函数调用
  • break(b) 行号:在某一行设置断点
  • break 函数名:在某个函数开头设置断点
  • info break :查看断点信息。
  • finish:执行到当前函数返回,然后挺下来等待命令
  • print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
  • p 变量:打印变量值。
  • set var:修改变量的值
  • continue(或c):从当前位置开始连续而非单步执行程序
  • run(或r):从开始连续而非单步执行程序
  • delete breakpoints:删除所有断点
  • delete breakpoints n(序号):删除序号为n的断点
  • disable breakpoints:禁用断点
  • enable breakpoints:启用断点
  • info(或i) breakpoints:参看当前设置了哪些断点
  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay:取消对先前设置的那些变量的跟踪
  • until X行号:跳至X行
  • breaktrace(或bt):查看各级函数调用及参数
  • info(i) locals:查看当前栈帧局部变量的值
  • quit:退出gdb
  • breakpoints:是断点编号

🙂感谢大家的阅读,若有错误和不足,欢迎指正

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

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

相关文章

Kuberntes权威指南

一、目录 二、Kubernetes入门 三、Kubernetes核心原理 四、Kubernetes开发指南 五、Kubernetes运维指南 六、Kubernetes高级案例进阶 七、Kubernetes源码导读

【Java程序设计】【C00247】基于Springboot的农机电招平台(有论文)

基于Springboot的农机电招平台(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的农机电招平台 本系统分为系统功能模块、管理员功能模块、农机机主功能模块以及使用者功能模块。 系统功能模块:农机电招…

验证码倒计时:用户界面的小细节,大智慧

欢迎来到我的博客,代码的世界里,每一行都是一个故事 验证码倒计时:用户界面的小细节,大智慧 前言为什么需要验证码倒计时防止滥用:用户心理: 设计考量可见性:友好性:适应性&#xff…

大数据学习之Redis,十大数据类型的具体应用(五)

目录 3.9 Redis地理空间(GEO) 简介 原理 Redis在3.2版本以后增加了地理位置的处理哦 命令 命令实操 如何获得某个地址的经纬度 3.9 Redis地理空间(GEO) 简介 移动互联网时代LBS应用越来越多,交友软件中附近的…

linux、windows 安装 vue-cli

Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,提供: 通过 vue/cli 实现的交互式的项目脚手架。 通过 vue/cli vue/cli-service-global 实现的零配置原型开发。 一个运行时依赖 (vue/cli-service) 可升级; 基于 webpack 构建&#…

【C++】win11,OpenCV安装教程(VS2022)

1.下载 首先进入官网,下载对应的安装包,苹果系统就选IOS pack,微软系统就选Windows 下载地址:Releases - OpenCV 不方便外网下载的话可以下载我分享的百度网盘资源: 链接:https://pan.baidu.com/s/1lV7l…

2024年考PMP还有什么用?

PMP 是项目管理专业人士资格认证的意思,也是项目管理领域通用的证书, 做项目的基本都会去考。 要说 PMP 有啥作用? 个人感觉 PMP 证书更多的是跳槽、转行的敲门砖的作用,因为现在很多公司都要 PMP 证书,有了可以加分…

C#向数组指定索引位置插入新的元素值:自定义插入方法 vs List<T>.Add(T) 方法

目录 一、使用的方法 1.自定义插入方法 2.使用List.Add(T) 方法 二、实例 1.示例1:List.Add(T) 方法 2.示例:自定义插入方法 一、使用的方法 1.自定义插入方法 首先需要定义一个一维数组,然后修改数组的长度(这里使用Length属性获取…

uniapp 使用renderjs引入echarts

效果图&#xff1a; 1.1renderjs引入echarts 组件zmui-echarts.vue&#xff1a; <template><view class"zmui-echarts" :prop"option" :change:prop"echarts.delay"></view> </template><script>export defaul…

Qt代码添加日志管理的模块功能

在程序中一般需要添加日志管理的记录&#xff0c;在学习Httpserver的过程中&#xff0c;学习到了日志管理模块&#xff0c;将QtwebApp的日志模块提取出来可作为一般性程序的日志管理&#xff0c;记录实验的过程&#xff0c;项目源代码也附在后面。 项目运行结果 项目代码结构 参…

一周学会Django5 Python Web开发-Django5介绍及安装

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计10条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

进阶C语言-通讯录的实现

通讯录 🎈1.设计要求🎈2.程序实现🔭2.1打印菜单及初始化通讯录🔭2.2显示所有联系人🔭2.3查找指定的联系人🔭2.4删除指定的联系人🔭2.5查找指定的联系人🔭2.6修改指定联系人🔭2.7按照年龄排序(以此为例)🎈3.全部源码以及实现🎈1.设计要求 🌞通过前面…

2.4-学成在线内容管理之项目实战

内容管理模块 文章目录 内容管理模块9 项目实战9.1 实战环境9.1.1 实战流程 9.2 删除课程计划9.2.1 需求分析9.2.2 接口定义9.2.3 接口开发9.2.4 接口测试 9.3 课程计划排序9.3.1 需求分析9.3.2 接口定义9.3.3 接口开发9.3.4 接口测试 9.4 师资管理9.4.1 需求分析9.4.2 接口定义…

第2节、让电机转起来【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍用简单的方式&#xff0c;让步进电机转起来。其目的之一是对电机转动有直观的感受&#xff0c;二是熟悉整个开发流程。本系列教程必要的51单片机基础包括IO口操作、中断、定时器三个部分&#…

2020年通信工程师初级 综合能力 真题

文章目录 第1章 通信职业道德&#xff0c;1-4第2章 法律法规&#xff0c;5-16第3章 计算机应用基础&#xff0c;第5章 现代通信网&#xff0c;38英语题&#xff0c;91 第1章 通信职业道德&#xff0c;1-4 1、职业道德在形式上具有()特点。 A.一致性 B.统一性 C.多样性 D.一般性…

基于SpringBoot+Vue的外卖点餐管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

人生,总要读几本好书!

以前&#xff0c;没有重视过读书的重要性 但是自从进入老马的陪伴群之后&#xff0c;听了老马的一路成长经历&#xff0c;才发现&#xff0c;所谓的一鸣惊人&#xff0c;都是厚积薄发的表现 大佬们在出人头地之前&#xff0c;都是有过很长一段时间的自我提升的 这个提升的方…

如何利用边缘计算网关进行机床数据采集,以提高数据采集的效率和准确性-天拓四方

边缘计算网关集成了数据采集、处理和传输功能的嵌入式设备。它位于传感器和执行器组成的设备层与云计算平台之间&#xff0c;能够实时处理和响应本地设备的数据请求&#xff0c;减轻云平台的压力&#xff0c;提高数据处理的速度和效率。同时&#xff0c;边缘计算网关还可以将处…

Qt 的安装以及项目的创建

目录 Qt简介Qt 开发环境安装的过程环境变量的配置Qt SDK 中的重要的工具创建一个 Qt 项目 Qt简介 开始安装教程前&#xff0c;首先来了解一下什么是QT。 QT&#xff08;Quick Thought&#xff09;是一个基于Qt库的快速应用程序开发框架。它提供了一套完整的开发工具和库&…

DataX详解和架构介绍

系列文章目录 一、 DataX详解和架构介绍 二、 DataX源码分析 JobContainer 三、DataX源码分析 TaskGroupContainer 四、DataX源码分析 TaskExecutor 五、DataX源码分析 reader 六、DataX源码分析 writer 七、DataX源码分析 Channel 文章目录 系列文章目录DataX是什么&#xff…