Linux调试器-gdb的使用简介

news2025/1/24 8:08:39

1、背景

  1. 程序的发布方式有两种,debug模式(给程序员用的)和release模式(给用户用的)
  2. Linux gcc/g++出来的二进制程序,默认是release模式
  3. 要使用gdb调试,必须在源代码生成二进制程序的时候,加上 -g 选项

注:debug模式产生的可执行程序,体积要比release模式产生的可执行程序的体积大,因为里面加了一些调试信息。这也是debug模式产生的可执行程序可调式的原因。

ex:

补充:readelf -S 可执行程序 -- 可以读取ELF可执行程序的符号表里的一些内容

注:Linux 下形成的可执行程序遵守ELF格式。

ex:

2、命令使用

开始调试:gdb binFile

退出:ctrl + d 或 quit 或

调试命令:

list/l <源代码文件名> 行号:显示 binFile 源代码,从行号的位置往下列,每次列10行。
list/l <源代码文件名> 函数名:列出某个函数的源代码。
r 或 run:运行程序直至碰到第一个断点(没有断点就一口气全部执行完)。
n 或 next:单条执行。-- 相当于 vs 中的逐过程
s 或 step:进入函数调用 -- 相当于 vs 中的逐语句
break(b) 行号:在某一行设置断点
break(b) 函数名:在某个函数开头(该函数的第一句有效代码)设置断点
info(i) break(b) :查看断点信息。
finish:执行完当前函数,然后停下来等待新的命令
print/p 变量名:查看该变量的内容,如果变量前面加了&,就是查看该变量的地址
set var:修改变量的值
continue(或c):从当前断点开始执行程序直到下一个断点(想只执行一块区域的代码时用)
delete(d) breakpoints(b):删除所有断点
delete n:删除序号为n的断点
disable n:禁用序号为n的断点 -- 注:这个 disable 不能再简写了,因为和 delete 的简写重合了。
enable n:启用序号为n的断点
info(或i) breakpoints:参看当前设置了哪些断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值 -- 就是长显示一个变量的内容 -- 注:这个 display 也不能简写。
undisplay n:取消对先前设置的序号为n的变量的跟踪
until X行号:跳至X行
breaktrace(或bt):查看各级函数调用及参数 -- 就像 vs 里的窗口里的调用堆栈
info(i) locals:查看当前栈帧的局部变量的值
quit:退出gdb
注:大部分命令可以只用其首字母进行简写。

3、总结

a.调试工具终究只是工具,它的核心作用就是方便我们找到问题。(解决问题还是要靠我们自己)

b.找问题的几个方法:

  1. 先直接用眼睛看,有的问题很简单,眼睛扫一扫就能看出来问题在哪
  2. 用打印,在某些你觉得会出问题的地方,用一下打印
  3. 注释一部分,运行一部分
  4. 调试

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

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

相关文章

通过 Visual Studio Code 启动 IPython

在Visual Studio Code 中&#xff0c;你可以使用内置的终端来启动 ipython&#xff0c;当然首先要安装好ipython。 安装ipython的方法是在cmd里面输入以下命令安装&#xff1a; pip install ipython 启动ipython的步骤如下&#xff1a; 打开 VSCode 终端&#xff1a; 在 VSCo…

019:什么是 Resnet50 神经网络

本文为合集收录&#xff0c;欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请查看这里。 在上一节中&#xff0c;使用了一个简单的神经网络进行识别数字。 这个网络结构非常简单&#xff0c;一是因为层数少&#xff0c;二是因为结构是顺序的&#xff0c;没有其他…

微信小程序获取位置服务

wx.getLocation({type: gcj02,success(res) {wx.log(定位成功);},fail(err) {wx.log(定位失败, err);wx.showModal({content: 请打开手机和小程序中的定位服务,success: (modRes) > {if (modRes.confirm) {wx.openSetting({success(setRes) {if (setRes.authSetting[scope.u…

煤矿场景下拖链检测数据集VOC+YOLO格式21407张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;21407 标注数量(xml文件个数)&#xff1a;21407 标注数量(txt文件个数)&#xff1a;2140…

Charles 4.6.7 浏览器网络调试指南:HTTPS抓包(三)

概述 在现代互联网应用中&#xff0c;网络请求和响应是服务交互的核心。对于开发者和测试人员来说&#xff0c;能够准确捕获并分析这些请求&#xff0c;是保证系统稳定性和性能的关键。Charles作为一个强大的网络调试工具&#xff0c;不仅可以捕获普通的HTTP请求&#xff0c;还…

第五天 Labview数据记录(5.1 INI配置文件读写)

5.1 INI配置文件读写 INI配置文件是一种简单的文本文件&#xff0c;通常用于存储软件的配置信息。它具有以下作用&#xff1a; 存储软件配置参数方便软件的维护和更新提高软件的灵活性和可扩展性便于用户修改和共享配置 5.1.1 前面板 1&#xff09;新建项目SaveData_Exampl…

1905电影网中国地区电影数据分析(一) - 数据采集、清洗与存储

文章目录 前言一、数据采集步骤及python库使用版本1. python库使用版本2. 数据采集步骤 二、数据采集网页分析1. 分析采集的字段和URL1.1 分析要爬取的数据字段1.2 分析每部电影的URL1.2 分析每页的URL 2. 字段元素标签定位 三、数据采集代码实现1. 爬取1905电影网分类信息2. 爬…

qml Dialog详解

1、概述 Dialog是QML&#xff08;Qt Modeling Language&#xff09;中用于显示对话框的组件&#xff0c;它提供了一个模态窗口&#xff0c;通常用于与用户进行重要交互&#xff0c;如确认操作、输入信息或显示警告等。Dialog组件具有灵活的布局和样式选项&#xff0c;可以轻松…

开关电源设计(1)--电感和伏秒平衡

电感&#xff08;Inductor&#xff09;是电子电路中用于存储磁场能量的被动元件&#xff0c;其核心特性是阻碍电流的变化。当电流通过导线时&#xff0c;周围会产生磁场&#xff0c;电感是衡量导线&#xff08;或线圈&#xff09;存储磁场能量能力的物理量。 先认识几个公式 …

Blazo-Blazor Web App项目结构

让我们还是从创建项目开始&#xff0c;来一起了解下Blazor Web App的项目情况 创建项目 呈现方式 这里我们可以看到需要选择项目的呈现方式&#xff0c;有以上四种呈现方式 ● WebAssembly ● Server ● Auto(Server and WebAssembly) ● None 纯静态界面静态SSR呈现方式 WebAs…

数据表中的数据查询

文章目录 一、概述二、简单查询1.列出表中所有字段2.“*”符号表示所有字段3.查询指定字段数据4.DISTINCT查询 三、IN查询四、BETWEEN ADN查询1.符合范围的数据记录查询2.不符合范围的数据记录查询 五、LIKE模糊查询六、对查询结果排序七、简单分组查询1.统计数量2.统计计算平均…

System slimming and Quicker action

今天介绍2款提升工作效率的软件&#xff0c;一款用于系统瘦身&#xff0c;当你的各个盘快满的时候&#xff0c;你又不知道该删除哪些文件的时候&#xff0c;就可以用这个插件&#xff0c;进行系统瘦身&#xff1b;另外一款是可以快捷做很多操作以节省时间&#xff0c;比如有很多…

2025年华为云一键快速部署饥荒联机服务器教程

饥荒是一款动作冒险类求生游戏&#xff0c;自行部署专属游戏联机服务器&#xff0c;可以确保游戏的流畅性和稳定性&#xff0c;获得更好的游戏体验。为了方便玩家搭建专属游戏联机服务器&#xff0c;华为云推出了云游戏专场&#xff0c;无需专业技术&#xff0c;新手小白也能一…

OSCP - Proving Grounds - Quackerjack

主要知识点 端口转发 具体步骤 执行nmap扫描,开了好多端口&#xff0c;我先试验80和8081&#xff0c;看起来8081比较有趣 Nmap scan report for 192.168.51.57 Host is up (0.0011s latency). Not shown: 65527 filtered tcp ports (no-response) PORT STATE SERVICE …

Go 切片:用法和本质

要想更好的了解一个知识点&#xff0c;实战是最好的经历。 题目 我这里放一道题目&#xff1a; package mainimport "fmt"func SliceRise(s []int) {s append(s, 0)for i : range s {s[i]}fmt.Println(s) }func SlicePrint() {s1 : []int{1, 2}s2 : s1s2 append…

零售业革命:改变行业的顶级物联网用例

mpro5 产品负责人Ruby Whipp表示&#xff0c;技术进步持续重塑零售业&#xff0c;其中物联网&#xff08;IoT&#xff09;正引领这一变革潮流。 研究表明&#xff0c;零售商们正在采用物联网解决方案&#xff0c;以提升运营效率并改善顾客体验。这些技术能够监控运营的各个方面…

安卓动态设置Unity图形API

命令行方式 Unity图像api设置为自动,安卓动态设置Vulkan、OpenGLES Unity设置 安卓设置 创建自定义活动并将其设置为应用程序入口点。 在自定义活动中,覆盖字符串UnityPlayerActivity。updateunitycommandlineararguments (String cmdLine)方法。 在该方法中,将cmdLine…

Go学习:iota枚举

iota注意事项&#xff1a; iota&#xff1a;常量自动生成器&#xff0c;每隔一行&#xff0c;自动累加iota给常量赋值使用iota 遇到 const&#xff0c;重置为 0可以只写一个iotaiota如果是同一行&#xff0c;值都一样 简单代码&#xff1a; package mainimport "fmt&qu…

SpringBoot篇 单元测试 理论篇

1.单元测试概念介绍 简单来说&#xff0c;单元测试是对软件中的最小可测试单元进行检查和验证。在 Java 中&#xff0c;单元测试的最小单元是类。Spring Boot 提供了 spring-boot-starter-test 依赖&#xff0c;包含了 JUnit、Mockito、Hamcrest 等常用的测试框架1。&#xff0…

Formality:不可读(unread)的概念

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482https://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 在Formality中有时会遇到不可读(unread)这个概念&#xff0c;本文就将对此…