欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > Linux调试工具——gdb/cgdb

Linux调试工具——gdb/cgdb

2025/4/18 23:44:40 来源:https://blog.csdn.net/tan_run/article/details/147086940  浏览:    关键词:Linux调试工具——gdb/cgdb

📝前言:
这篇文章我们来讲讲Linux调试工具——gdb/cgdb

🎬个人简介:努力学习ing
📋个人专栏:Linux
🎀CSDN主页 愚润求学
🌄其他专栏:C++学习笔记,C语言入门基础,python入门基础,C++刷题专栏


目录

  • 一,debug 和 release
  • 二,什么是gdb/cgdb
  • 三,gdb命令
    • 1. 调试的文件要求
    • 2,常见指令
      • 2.1 进入和退出
        • gdb 和 quit
      • 2.2 显示源代码
        • list
      • 2.3 断点 break
        • 设置断点
        • 删除断点
        • 断点的使能
      • 2.4 执行
        • run 和 continue
        • next 和 step
        • finish
        • until
      • 2.5 打印,查看信息
        • print
        • display 和 undisplay
        • info
        • backtrace
        • watch
      • 2.6 修改变量
        • set var
    • 三,cgdb的特别命令

一,debug 和 release

  • debug 版本:开发期间使用的,用于调试,发现问题
  • release版本:产品发布的版本,以及测试用的版本

二,什么是gdb/cgdb

gdb就是一个强大的调试工具,cgdb 结合了gdb的功能和类似Vim的文本界面,为用户提供更好的调试体验。

三,gdb命令

1. 调试的文件要求

gdb 用于调试程序的debug版本
语法:gdb + 文件名(可执行程序)

注意
Linux下,gcc编译的文件默认是release版本,如果需要编译成debug版本,需要使用-g选项
如:
在这里插入图片描述
不使用-g是产生的是release版本,使用-g后才是debug版本

补充:gcc编译时要指定语法版本(如c99):-std=c99

2,常见指令

2.1 进入和退出

gdb 和 quit
  • 进入:gdb + 文件名(可执行程序)
  • 退出:quit

2.2 显示源代码

list

命令:list,别名l
作用:显示源代码

  • list 5:从上次位置开始,列出行号为5附近的 10 行源代码
  • list main:列出指定函数的源代码
  • list code.c(源文件):1:查看源文件code.c第一行附近的源代码

示例:
在这里插入图片描述

2.3 断点 break

设置断点

命令:break,别名:b,断点也用符号b表示
作用:设置断点

  • b 10:在第10行设置断点
  • b test.c:10:在源文件 test.c的第10行设置断点
  • b main:在main函数的入口设置断点
  • b 10 if condition:在第10行设置条件断点。条件断点即:当满足condition条件的时候断点才被使能
  • conditon + 断点编号 + 条件内容(不用前跟if):给已经存在的断点设置条件

断点建立好以后是有编号的,后续对断点进行各种操作都是基于断点编号。在一次调试过程中编号的顺序不会重置。

示例:
在这里插入图片描述
在这里插入图片描述
标红了为设置了断点的地方

删除断点

命令:delete,别名d
作用:删除断点

  • d break:删除所有断点
  • d 1:删除编号为 1 的断点

示例:
在这里插入图片描述

断点的使能

使能就是:不禁用,起作用
一个端点,当我们不需要时,不一定非要删除,还可以选择禁用它

  • disable b:禁用所有断点
  • disable 1:禁用编号为 1 的断点
  • enable b:启用所有断点
  • enable 1:启用编号为 1 的断点

示例:
在这里插入图片描述

2.4 执行

run 和 continue

run
命令:run,别名:r
作用:运行程序,到断点位置停止。或者,重新开始调试

continue
命令:continue,别名:c
作用:继续运行程序,直到程序结束,或遇到下一个断点,或遇到错误

示例:
runc
在这里插入图片描述
变化:
在这里插入图片描述
从第16行断点的位置直接到下一个断点(第5行):
在这里插入图片描述

next 和 step

next
命令next,别名:n
作用:单行执行,不会进入函数,把函数当一行代码直接执行完

step
命令:step,别名:s
作用:单步执行,会进入函数内部

按回车键,会重复上一个命令

示例:
在这里插入图片描述

finish

命令;finish,别名fin
作用:若此时在函数内部,直接执行到函数返回

示例:
在这里插入图片描述
在这里插入图片描述

until

命令:until,别名u
作用:直接执行到指定行号

  • until 20:直接执行到第20行

示例:
在这里插入图片描述
在这里插入图片描述

2.5 打印,查看信息

print

命令:print,别名:p
作用:打印变量 / 表达式的值

  • print start+end:打印start+end的值
  • p x:打印x的值

示例:
在这里插入图片描述
在这里插入图片描述
作用域规则:在 C 语言里,变量的作用域决定了它在程序里的可见范围。变量 a 是在 main 函数中定义的局部变量。而当前调试位置处于 sum 函数内部,sum 函数和 main 函数是不同的作用域。根据 C 语言的作用域规则,sum 函数无法直接访问 main 函数里定义的局部变量,所以 GDB 在当前的 sum 函数调试上下文中找不到变量 a

display 和 undisplay

命令:displayundisplay,别名:dispundisp

  • display x:跟踪显示指定变量的值(每次停止时,指到下一个断点处,或者单步执行,按回车不行)
  • undisplay 1:取消对指定编号的变量的跟踪显示

示例:
在这里插入图片描述

info
  1. 查看断点信息
  • info break:查看断点信息(break也可以用别名b,或breakpoints来表示断点)
  • info b 2:查看编号为 2 的断点信息

示例:
在这里插入图片描述

  1. 查看自动显示项信息
  • info display 1:查看自动显示项 1 的信息
  1. 查看当前栈帧的局部变量值
  • info locals:查看当前栈帧的局部变量值
backtrace

命令:backtrace,别名:bt
作用:查看当前执行栈的各级函数调用及参数

在这里插入图片描述

watch

命令:watch
功能:执⾏时,监视⼀个表达式(如变量)的值。如果监视的表达式在程序运⾏期间的值发⽣变化,GDB 会暂停程序的执⾏,并通知使⽤者

2.6 修改变量

set var

命令:set var
作用:在调试过程中修改程序里变量的值

  • set var i=10 :把i值修改成10

示例:
在这里插入图片描述

三,cgdb的特别命令

  • Esc可以查看源代码,按方向键上下浏览,然后i退出
  • cgdb的条件断点有点bug

🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词