linux 中的 gdb 调试方法和技巧(有截图超详细)

news2024/11/28 4:50:27

一、 背景

1. 程序的发布方式有两种,debug模式和release模式

2. Linux gcc/g++出来的二进制程序,默认是release模式

3. 要使用gdb调试,必须在源代码生成二进制程序的时候,加上 -g 选项

如下图:

不加 -g 默认是 release 模式,无法调试,上面那句话是说:(找不到调试符号 )

那么加上 -g 如何?

可以看到文件的大小都变化了,因为 -g 是 Debug 模式。

 现在没有向前面那样报错找不到调试符号了,如下图:

二、开始使用

1. gdb 会记录最近一条命令,如果命令无变化,可以直接回车

2. 调试命令:

(1)r或run:开始调试,如果没有设置断点,就直接运行结束。

(2)info break / info b:查看断点(断点的编号)

(3)break(b) 行号:给特定的行号打断点。


(4)delete breakpoints n / d 断点编号:删除编号为 n 的断点

       
(5)n 或 next:单条执行(和 VS中的 F10 一样 逐过程)

  (这里需要打上断点!!!不然 r 直接运行完了)

(6)p 变量:打印变量值。

 

(7)s :逐语句(VS中的 F11)

        因为我这里只写了 printf,没有自己实现,看着效果可能和 n 一样,但是是不一样的!!!

(8)bt : 查看当前的调用堆栈

因为只写了 main 函数,所以只有 main 函数

(9)disable/enable断点的编号 : 使能(关闭和打开)断点

(10)c : 运行至下一个断点处停下来

(11)list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行,如下图:

(12)finish : 将当前函数跑完,就停下来display:设置长显示

(13)undisplay : 取消长显示

(14)until : 跳转到指定行(不建议)

(15)set var:修改变量的值

(16)continue(或c):从当前位置开始连续而非单步执行程序

(17)break 函数名:在某个函数开头设置断点

(18)delete breakpoints:删除所有断点

(19)disable breakpoints:禁用断点

(20)enable breakpoints:启用断点

(21)display 变量名:跟踪查看一个变量,每次停下来都显示它的值

(22)breaktrace(或bt):查看各级函数调用及参数

(23)info(i) locals:查看当前栈帧局部变量的值

(24)quit/q: 退出gdb

以上就是 gdb 调试工具的使用。 

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

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

相关文章

【Java】快速排序

文章目录 一、什么是快速排序二、基准元素的选择1、选择第一个元素2、随机选择 三、元素的交换1、双边循环法2、单边循环法 一、什么是快速排序 快速排序是由冒泡排序演变而来,比冒泡排序更快的排序算法。之所以快,是因为快速排序用了分治法。 相同的是…

基于均值方差最优化资产配置的模型特性

摘要及声明 1:本文主要利用实际数据进行检验,从定量角度分析均值方差最优化的特性; 2:本文主要为理念的讲解,模型也是笔者自建,文中假设与观点是基于笔者对模型及数据的一孔之见,若有不同见解…

Linux最小安装网络配置、jdk安装以及虚拟机克隆的操作(超详细过程)

一、最小安装配置网络 1、配置文件: 进入“/etc/sysconfig/network-scripts”目录,查看当前目录下的“ifcfg-ens33”文件 对“ens33”文件进行配置 2、重启网络: 使用“systemctl restart network”命令即可 3、ping网络,如果…

【Proteus仿真】51单片机+步进电机驱动

【Proteus仿真】51单片机步进电机驱动 🔖Proteus仿真基础实验-步进电机驱动🌿Proteus8.12平台 📋步进电机简介 步进电机是一种将电脉冲转换为角位移的开环控制元步进电机。一般地,当步进驱动器接收到脉冲信号时,它将根…

企业邮箱购买指南:分享如何购买适合企业的企业邮箱

如果你想为你的公司设立一个新的公司邮箱帐户,有几种不同的选择可供选择。根据公司的规模和需求,你可以从邮箱托管公司购买一个邮箱地址,购买域名并创建一个自定义邮箱地址,或者与第三方提供商合作。无论您选择哪种方法&#xff0…

服务(第三十四篇)ceph-分布式存储

什么是ceph? ceph 是一种统一的分布式文件系统,具有优秀的性能、高可用性和可扩展性。ceph 的统一体现在可以提供文件系统、块存储和对象存储,分布式体现在可以动态扩展。在国内一些公司的云环境中,通常会采用 ceph 作为 openstac…

机器学习强基计划10-2:详细推导串行集成AdaBoost算法(附Python实现)

目录 0 写在前面1 串行集成学习2 AdaBoost原理推导3 Python实现3.1 算法流程3.2 核心代码3.3 可视化 0 写在前面 机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理;“广”在分析多个机器学习模…

chatgpt赋能python:Python数据处理之去除NaN值

Python 数据处理之去除 NaN 值 作为数据分析和处理领域中的一种高效工具,Python 在数据清理方面表现优异。而 NaN 是数据处理中常见的问题之一,过多的 NaN 值常常会导致分析结果不准确或无法得出结论,因此 Python 提供了多种方法去除 NaN 值…

chatgpt赋能python:Python反转数字的方法

Python反转数字的方法 Python作为一种高级编程语言,拥有着丰富的数学计算、数组处理及字符串操作等功能。在实际开发中,需要进行反转数字的操作时,Python提供了多种方法来完成此项任务。 用Python反转数字 反转数字是指将一个数字从后往前…

SQL语句之DML语言

说明:DML(Data Manipulation Language),用来对数据库中表的数据记录进行增、删、改操作。注意,没有查询,数据的查询单独拎出来成DQL(Data Query Language,数据查询语言)&…

吴恩达 ChatGPT Prompt Engineering for Developers 系列课程笔记--03 Iterative

03 Iterative 本节主要通过代码来讲解如何在迭代中找到合适的prompt。对于初学者来说,第一次使用Prompt不一定得到语气的结果,开发者可以采用下述流程进行迭代优化: 给出清晰、具体的指令如果结果不正确,分析原因调整prompt重复…

ClickHouse的join优化

概要: ClickHouse 最为擅长的领域是一个大宽表来进行查询,多表 JOIN 时Clickhouse 性能表现不佳。 CK执行模式 第一阶段,Coordinator 收到查询后将请求发送给对应的 worker 节点;第二阶段,Coordinator 收到各个 work…

Java内存模型和常见的内存溢出类型及解决方案

Java内存模型与常见的内存溢出 一. Java 运行过程和内存分配1 Java的平台无关性2 Java内存模型2.1Java内存模型图 3 内存结构详解3.1 元空间(MetaSpace)3.2 堆区(Heap)新生代老年代 3.3 虚拟机栈(VM Stack)…

Linux :: vim 编辑器:详解:光标移动定位内容,行间:快速定位至文本:开头 / 结尾;行内:词间跳跃

前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集: C 入门到入土!!!学习合集Linux 从命令到网络再到内核!学习合集 前言&#x…

Asana替代方案推荐:盘点2023年8种优质的免费和付费替代工具

Asana是一个项目管理和团队合作软件平台,自2008年成立以来,一直在彻底改变团队合作的方式。Asana以其直观的用户界面而闻名,是项目经理和团队领导的热门选择。然而在快节奏的项目管理世界中,技术发展很快。因此,当涉及…

chatgpt赋能python:Python取余方法介绍

Python取余方法介绍 在Python编程中,取余(也称为求模运算或取模运算)是计算机程序经常使用的一种基本算术运算。Python提供了两种方法来执行取余运算:使用百分号符号(%)和divmod()函数。 使用百分号符号&…

揭秘HTTP代理的神奇力量:让你的系统突破内网限制

大家好,我是你们的小米!今天,我要和大家聊聊一个技术问题,那就是关于"http代理"的使用。昨日,我刚刚午休睡醒,项目经理杰哥叫我关注下其中一个项目的部署进展情况。而就在这时,客户侧…

15天学会EasyX 第2天:EasyX里的设备坐标与打开关闭绘图窗口

本文为山城瑞宝创作,转载请标注版权! 本文里的函数使用都不需要先写明原型,原型就在其对应的库里(直接用) 目录 1. 设备及其坐标 2. 如何打开与关闭绘图窗口 2.1. initgraph 2.1.1. 没有flag的代码示例 2.1.2. 使用了…

会声会影2023旗舰中文试用版下载安装教程

会声会影2023版(Corel VideoStudio)是一款专业视频制作软件及视频剪辑软件,可以剪辑合并视频,制作视频,屏幕录制,光盘制作,视频后期编辑,添加特效,字幕和配音等操作,界面美观,素材丰富,操作简洁而! 会声会影有多轨道式编辑功能,可以独立处理视频、图片、音频等素材&…

MATLAB笔记总结(1) 东华大学MOOC

循环语句 MATLAB函数句柄 https://zhuanlan.zhihu.com/p/266263265 https://blog.csdn.net/shaozheng0503/article/details/130305984?spm1001.2014.3001.5501 数据和变量 表达式 分号;) 逗号(, ), 省略号(3个英文句点…)。 历史指令调用:用方向键(↑↓) 数据…