当前位置: 首页 > news >正文

【Linux开发工具】调试器-gdb

目录

一、前言

二、gdb详解

1.生成debug文件

2.初识gdb

3.cgdb的安装和使用

4.调试技巧


一、前言

gdb(GNU Debugger)是一个强大的命令行调试工具,能够用于各种如C、C++、java、Python等编程语言的程序,使用gdb能帮助我们快速高效定位程序中出现的错误并解决,是Linux中最常用的调试工具之一。

本文将介绍gdb的使用,安装cgdb更直观看见调试界面,以及关于打断点、标变量、逐过程逐语句等调试的基本过程指令,学习本篇将有助于在Linux下更高效地编写程序。


二、gdb详解

1.生成debug文件

程序的发布有两种方式,debug模式和release模式。在Linux下用gcc直接编译出来的文件默认是release模式,也就是优化版本,不包含调试信息,如果我们要去调试程序,必须用debug模式的可执行程序,因此gcc编译时需要带上-g选项:

使用指令:gcc -g code.c -o code 编译出包含调试信息的可执行程序

可以发现加了-g生成的debug可执行程序是比默认生成的要大的,就是因为包含了调试信息。


2.初识gdb

生成了带调试信息的可执行程序后,就可以用gdb初步进行调试了。

输入指令 gdb 可执行程序名 开始调试

输入指令 l 数字n 就可以从n行开始查看代码,使用回车查看下一页

输入指令 b 数字n 在第n行设置断点,使用  r  来运行到断点处,使用  c  运行到下一个断点


3.cgdb的安装和使用

直接用gdb不够直观,很麻烦看不到代码本身运行,此时就推荐安装cgdb来辅助我们调试。

Centos : yum install -y cgdb

Ubuntu : apt-get install -y cgdb

随后直接cgdb 可执行程序名 就可以实现上边是代码,下边是调试信息的界面了。

注: cgdb分屏操作ESC进入代码屏,i回到gdb屏

指令 : b 文件名:数字n 用来给第n行打断点,对应的行号数字会变红

指令 : info b 用来查看断点信息,其中Num表示断点标号,Enb表示使能

指令 :d 断点编号 用来删除断点

指令:disable/enble 断点编号 用来使断点失效/有效

指令 : n 逐过程  s 逐语句 相当于VS调试中的F10和F11

指令 : bt 查看栈帧,系统每一次调用函数都会创建一个栈帧

指令 : finish 结束当前函数的运行,直接跳到进入该函数的地方

指令 : p + 变量 查看临时变量的值

指令:until 数字n 直接跳转到n行

指令:display 变量名 /  undisplay 编号 用来让变量长显示/消失(注意undisplay是编号)

指令:info locals 查看函数中所有变量的值


4.调试技巧

指令 watch 变量名 可以用来监视变量,d 编号 用来取消监视,用info b同样能看到。

被监视的变量值被修改了就会通知我们。

指令set var 变量名=数值 可以在函数内部直接改变某个变量的值,用来演示结果被修改后程序是否正确运行。

指令 b 数字n if 条件 用来在第n行设立条件断点

指令conditon 断点编号 条件 用来给已有断点追加条件

相关文章:

  • 【动态路由】系统Web URL资源整合系列(后端技术实现)【nodejs实现】
  • 代码随想录算法【Day46】
  • PHP处理大文件上传
  • 搜广推校招面经十六
  • es和kibana安装
  • WEB安全--SQL注入--堆叠注入
  • 53倍性能提升!TiDB 全局索引如何优化分区表查询?
  • 关系数据库标准语言SQL
  • SQL语句语法
  • 【Java】xxl-job
  • print(f“Random number below 100: {random_number}“)的其他写法
  • 【Linux】:网络协议
  • c++--变量内存分配
  • C语言进阶习题【3】5 枚举——找单身狗2
  • Pytest快速入门
  • 【MySQL】第五弹---数据类型全解析:从基础到高级应用
  • Linux 上安装 PostgreSQL
  • AI时代:架构师的困境与救赎
  • 计时器任务实现(保存视频和图像)
  • 牛客小白月赛110
  • 讲座|消逝之钟:《红楼梦》与《布登勃洛克一家》中的时间观
  • 定制基因编辑疗法治愈罕见遗传病患儿
  • 国税总局上海市税务局回应刘晓庆被举报涉嫌偷漏税:正依法依规办理
  • 李家超:明日起香港特区护照持有人可免签入境阿联酋
  • 这个“超强致癌细菌”,宝宝感染率高达40%,预防却很简单
  • 从600名外到跻身大满贯,孙发京:走过的路成就了现在的我