【Linux初阶】Linux调试器-gdb使用 | gdb的 l/b/info/d/r/n/s/bt/finish/p/(un)display/q
创始人
2024-04-09 19:11:43
0次

 🌟hello,各位读者大大们你们好呀🌟

🍭🍭系列专栏:【Linux初阶】

✒️✒️本篇内容:gdb使用相关背景知识,gdb的使用(打断点、查断点、消断点、调试运行、查看对应变量)

🚢🚢作者简介:计算机海洋的新进船长一枚,请多多指教( •̀֊•́ ) ̖́-

📡📡同期Linux工具文章:Linux环境下的 git 使用

目录

一、背景知识

二、gdb的使用

1. gdb安装

2. l - debug模式下查看代码

3. b、info、d - debug模式下打断点、查断点、去断电

4. r、n、s - 调试运行(逐过程、逐语句)

5. bt、finish - 查看调用堆栈、跑完对应函数

6. p - 查看对应变量和对应变量的地址

7. (un)display - 对特定变量进行常显示 

8. 修改变量值、禁用/启用断点、退出 (q)


一、背景知识

程序的发布方式有两种,debug模式和release模式(debug用于程序员调试,release对代码进行了优化,多给予用户使用)

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

要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项,以debug方式发布

Linux环境下,调试默认为release模式,不能直接调试

 在makefile的gcc生成指令中加上 -g,使程序以debug方式发布

  • 这里是在源文件 mycode.c 和 main.c 后面加 -g ,(-DN=1可忽略)


二、gdb的使用

1.gdb安装

sudo yum install gdb    #普通用户
yum install gdb    #root用户


2.l - debug模式下查看代码

l显式可执行程序代码
l 0显式可执行程序第一行代码 - [小写英文L,数字0]
回车默认运行上一次的指令(第二次输入l,代码下翻)


3.b、info、d - debug模式下打断点、查断点、去断电

对应指令如下

  • break(b) 行号:在某一行设置断点
  • info(或i) breakpoints:参看当前设置了哪些断点
  • delete breakpoints n:删除序号为n的断点
  • delete breakpoints:删除所有断点

对应示例如下 

 


4.r、n、s - 调试运行(逐过程、逐语句)

 对应指令如下

  • r或run:运行程序
  • n 或 next:单条执行(逐过程)
  • s或step:进入函数调用(逐语句)


5.bt、finish - 查看调用堆栈、跑完对应函数

  对应指令如下

对应示例如下 

  • 进入到 ProncessOn () 函数中的堆栈调用情况

  •  运行完对应函数(进度条小程序),再查看对应的堆栈


6.p - 查看对应变量和对应变量的地址

  对应指令如下

  • p + 对应变量名 —— 查看对应变量
  • p + &对应变量名 —— 对应变量的地址

 

对应示例如下 (在循环中查看变量sum、i 及其地址)


7.(un)display - 对特定变量进行常显示 

  对应指令如下

  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay 变量名:取消对先前设置的特定变量的跟踪


8.修改变量值、禁用/启用断点、退出 (q)

  对应指令如下

  • set var:修改变量的值
  • disable breakpoints:禁用断点
  • enable breakpoints:启用断点
  • quit:退出gdb 


 🌹🌹Linux调试器-gdb的使用大概就讲到这里啦,博主后续会继续更新更多Linux操作系统的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!💪💪

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...