GDB 调试必会指南

GDB 调试必会指南

1 gdb调试

1.1 gdb介绍

  • GDB(GNU Debugger)是GCC的调试工具。其功能强大,描述如下:
  • GDB主要帮助你完成下面四个方面的功能:
    • 启动程序,可以按照你的自定义的要求随心所欲的运行程序
    • 可让调式的程序在你所指定的断点处停住。(断电可以是条件表达式)
    • 当程序被停住时,可以检查此时你的程序中所发生的事
    • 动态的改变你程序的执行环境

1.2 生成调试信息

  • 一般来说GDB主要调试的是 C/C++的程序。要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。
    • 使用编辑器(cc/gcc/g++)的 -g 参数可以做到这一点
  • 如:
    • gcc -g -c hello.c
    • gcc -o hello hello.o
    • 如果没有-g,你将看不到程序的函数名,变量名,所代替的全是运行时的内存地址。当你用 -g 把调试信息加入之后,并成功编译目标代码以后,接下来就是如何使用gdb来调试它。

1.3 启动gdb

  • 启动gdb:gdb program
    • program也就是你的执行文件,一般在当前目录下。
  • 设置运行参数
    • set args 可指定运行时参数。(如: set args 10 20 30 40 50
    • show args命令可以查看设置号的运行参数。
  • 启动程序
    • run 程序开始执行,如果有断点,停在第一个断点处
    • start 程序向下执行一行。(在第一条语句处停止

1.4 显示源代码

  • GDB可以打印所调试程序的源代码,当然,在程序编译时一定要加上 -g 的参数,把源程序信息编译到执行文件中。不然就看不到源程序了。当程序停下来以后,GDB会报告程序停在了那个文件的第几行上。你可以用list命令来打印程序的源代码,默认打印10行,list命令的用法如下所示:
    • list linenum:打印 第 linenum行的上下文内容
    • list function 显示函数名为 function 的函数的源程序
    • list 显示当前行后面的源程序
    • list - 显示当前文件开始初的源代码
    • list file:linenum 显示file文件下第n行
    • list file:function 显示file文件的函数名function的函数的源代码
  • 一般时打印当前行的上5行和下5行,如果显示函数是上2行下8行,默认是10行,当然,也可以定制显示范围,使用下面命令可以设置一次显示源代码的行数
    • set listsize count 设置一次显示源代码的行数
    • show listsize 查看当前listsize的设置

1.5 设置断点

简单断点-当前文件

  • break设置断点,可以简写为 b
    • b 10 设置断点 ,在源程序第10行
    • b func 设置断点, 在 func 函数入口处

多文件设置断点-其他文件

  • 在进入指定函数时停住:
    • b filename:linenum – 在源文件 filename 的linenum 行处停住
    • b filename:function —在源文件 filename的function函数的入口停住

查询所有断点

  • info break

失效/生效断点

  • disable m n | m-n

  • enavle m n | m-n

条件断点

  • b test.c:8 if intValue == 5

删除断点

  • delete m n | m-n
  • d m n | m-n
  • delete 删除所有断点

1.6 调试代码

  • run 运行程序,课简写为 r
  • next 单步跟踪,函数调用当作一条简单语句执行,课简写为 n
  • step 单步跟踪, 会进入到被调用函数体内,课简写为 s
  • finsh 退出进入的函数如果出不去,看一下函数体中的循环是否有断点,如果有删除,或者设置无效
  • until 在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体,可简写为 u
    • 如果出不去,看一下函数体中的循环是否有断点,如果有删除,或者设置无效,
  • continue 继续运行程序,可简写为 c若有断点则跳到下一个断点处

1.7 查看变量的值

查看运行时的变量

  • print 打印变量、字符串、表达式等的值,可简写为 p
    • p count -----打印 count 的值

自动显示变量的值

  • 你可以设置一些自动显示的变量,当程序停住时,或是在你单步跟踪时,这些变量会自动显示。相关的GDB命令时display。

    • display 变量名

    • info display — 查看display设置的自动显示的信息

    • undisplay num(info display 时显示编号)

    • delete display dnums...—删除自动显示,dnums意为所设置好了的自动显示的编号。如果要同时删除几个,编号可以用空格分隔,如果要删除一个范围内的编号,可以用剑豪表示

      • 删除某个自动显示:undisplay num 或者 delete display num
      • 删除多个:delete display num1 num2
      • 删除一个范围的:delete display m-n
    • disable display dnums...

      • 使一个自动显示无效: disable display num
    • enable disable dnums...

      • 使其从无效变成有效

    查看修改变量的值

    • ptype width - 查看变量width的类型
      • type = double
    • p width—打印变量width的值
      • $4 = 13
    • 你可以使用set var命令来告诉GDB, width不是你GDB的参数,而是程序的变量名,如:
      set var width=47/将变量var值设置为47
    • 在你改变程序变量取值时,最好都使用set var格式的GDB命令

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

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

相关文章

说说广播流与普通流

分析&回答 user actions 可以看作是事件流(普通流)patterns 为广播流,把全量数据加载到不同的计算节点。 广播流 Broadcast是一份存储在TaskManager内存中的只读的缓存数据在执行job的过程中需要反复使用的数据,为了达到数据共享&am…

Windows系统中Apache Http服务器简单使用

1 简介 Apache HTTP服务器是一个开源的、跨平台的Web服务器软件。它由Apache软件基金会开发和维护。Apache HTTP服务器可以在多种操作系统上运行,如Windows、Linux、Unix等,并且支持多种编程语言和技术,如PHP、Perl、Python、Java等。…

Unity ShaderGraph教程——基础shader

1.基本贴图shader: 基础贴图实现:主贴图、自发光贴图、光滑度贴图、自发光贴图(自发光还加入了颜色影响和按 钮开关). 步骤:最左侧操作组——新建texture2D——新建sample texture 2D承…

React 生命周期新旧对比

前言 React16.4版本之后使用了新的生命周期,它使用了一些新的生命周期钩子(getDerivedStateFromProps、getSnapshotBeforeUpdate),并且即将废弃老版的3个生命周期钩子(componentWillMount、componentWillReceiveProps…

WebGPU加载Wavefront .OBJ模型文件

在开发布料模拟之前,我想使用 WebGPU 开发强大的代码基础。 这就是为什么我想从 Wavefront .OBJ 文件加载器开始渲染 3D 模型。 这样,我们可以快速渲染 3D 模型,并构建一个简单而强大的渲染引擎来完成此任务。 一旦我们有了扎实的基础&#x…

我们把“高血压”小游戏真正做到了不用下载,点击即玩!!!

相信大家经常在短视频网站上刷到各种“高血压“小游戏吧,当你按捺不住点击,却发现手机上多了一大堆“流氓软件”的时候,血压就更高了。 但是! 今天! 我们把“虚假广告”做成了真实的游戏,并且可以轻松部署到…

【openEuler创新项目探索】一个Java端的向量化BLAS库VectorBLAS

VectorBLAS简介 VectorBLAS是一个使用Java语言实现的向量化BLAS高性能库,目前已在openEuler社区开源。 VectorBLAS通过循环展开、矩阵分块和内存布局优化等算法优化,对BLAS函数进行了深度优化,并利用VectorAPI JDK提供的多种向量化API实现。…

利用Jmeter做接口测试(功能测试)全流程分析

利用Jmeter做接口测试怎么做呢?过程真的是超级简单。 明白了原理以后,把零碎的知识点填充进去就可以了。所以在学习的过程中,不管学什么,我一直都强调的是要循序渐进,和明白原理和逻辑。这篇文章就来介绍一下如何利用…

开源vue动态表单组件

一、项目简介 vueelement的动态表单组件,拖拽组件到面板即可实现一个表单 二、实现功能 支持拖拽 支持输入框 支持文本框 支持数字输入框 支持下拉选择器 支持多选框 支持日期控件 支持开关 支持动态表格 支持上传图片 支持上传文件 支持标签 支持ht…

vue中实现echarts三维散点图

需要安装 echarts 同时引入 echarts-gl 我安装的版本: "echarts": "^5.3.2", "echarts-gl": "^2.0.9", import Vue from "vue"; import * as echarts from "echarts"; Vue.prototype.$echarts echa…

常用Web漏洞扫描工具汇总(持续更新中)

常用Web漏洞扫描工具汇总 常用Web漏洞扫描工具汇总1、AWVS,2、OWASP Zed(ZAP),3、Nikto,4、BurpSuite,5、Nessus,6、nmap7、X-ray还有很多不是非常知名,但可能也很大牌、也较常见的。…

docker 安装 mysql 并挂载 配置文件和数据目录

1、宿主机创建挂载目录 sudo mkdir /path/mysql/data sudo mkdir /path/mysql/conf2、搜索镜像 docker search mysql拉取官方支持版本(OFFICIAL 为 ok的版本) docker pull mysql:latest3、以 mysql 作为基础镜像构建容器并挂载目录 docker run -d -p…

HTML5离线储存

简介 离线存储指的是:在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,更新用户机器上的缓存文件。 原理:HTML5的离线存储是基于一个新建的 .appcache 文件的缓存机制(不是存储技术)&#xf…

生成对抗网络(GAN):在图像生成和修复中的应用

文章目录 什么是生成对抗网络(GAN)?GAN在图像生成中的应用图像生成风格迁移 GAN在图像修复中的应用图像修复 拓展应用领域总结 🎉欢迎来到AIGC人工智能专栏~生成对抗网络(GAN):在图像生成和修复…

28. 找出字符串中第一个匹配项的下标

28. 找出字符串中第一个匹配项的下标 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 class Solutio…

C++中常量#define和const修饰符区别

目录 1、常量需要初始化值 2、1类型和安全检查不同 2、2编译器处理不同 2、3存储方式不同 2、4定义域不同 2、6是否可以做函数参数 3、 const关键字 4、#define关键字 5、const在指针上的应用 1、常量需要初始化值 //错误写法 const double pi;//会报未初始化本地变…

Visual Studio Code 终端配置使用 MySQL

Visual Studio Code 终端配置使用 MySQL 找到 MySQL 的 bin 目录 在导航栏中搜索–》服务 找到MySQL–>双击 在终端切换上面找到的bin目录下输入指令 终端为Git Bash 输入命令 ./mysql -u root -p 接着输入密码,成功在终端使用 MySQL 数据库。

go中的切片

demo1:切片定义的几种方式 package mainimport "fmt"/* 切片定义的几种方式数组和切片区别: 使用数组传参是值传递,而使用切片传参是引用传递 数组定义好长度之后不可修改,而切片可以理解为动态数组,长度可修改*/func …

Annual Inspection

机动车年检流程【交警12123】APP 到【检查地方】门口墙上贴着 然后上缴钥匙,等待,本次等待不到半小时搞定,速度很满意, 发现检测人员把你的里程数纠正了。 给你的行驶证,打印这些字样:检验有效期至XXXX 再给…

ChatGPT帮助高职院校学生实现个性化自适应学习与对话式学习

一、学习层面:ChatGPT帮助高职院校学生实现个性化自适应学习与对话式学习 1.帮助高职院校学生实现个性化自适应学习 数字技术的飞速发展引起了教育界和学术界对高职院校学生个性化自适应学习的更多关注和支持,其运作机制依赖于人工智能等技术&#xff0…