一、GDB简介

  • GDB:GNU Debugger,时GUN工程为GUN操作系统开发的调试器,但它的使用不局限于GUN操作系统,GDB可以运行在UNIX、Linux甚至Microsoft Windows.

  • GDB可以调试在C、C++、Objective-C、Pascal、Ada等语言编写的程序;被调试的程序可以个别GDB运行于同一台电脑i,也可以运行在不同电脑。

  • 使用GDB我们可以:

  • 设置断点使程序停住
  • 监视或修改程序中变量的值
  • 跟踪代码执行过程

二、GDB的使用

  • 程序要能被调试,必须包含调试信息

  • 编译程序时,通过gcc的-g选项为程序添加调试信息, 例如:gcc –g –o helloworld helloworld.c

1.启动GDB

ubuntu中GDB的调试

2.GDB命令

  • file 装入想要调试的可执行文件
  • kill 终止正在调试的程
  • list 列出产生执行文件的源代码的一部分
  • next 执行一行源代码但不进入函数内部
  • step 执行一行源代码而且进入函数内部
  • run 执行当前被调试的程序
  • c 继续运行程序
  • quit 终止gdb
  • watch 使你能监视一个变量的值而不管它何时被改变
  • backtrace 栈跟踪,查出代码被谁调用
  • print 查看变量的值
  • make 使你能不退出gdb就可以重新产生可执行文件
  • shell 使你能不离开gdb就执行UNIX shell命令
  • whatis 显示变量或函数类型
  • break 在代码里设断点,这将使程序执行到这里时被 挂起
  • info break 显示当前断点清单,包括到达断点处的次数等
  • info files 显示被调试文件的详细信息
  • info func 显示所有的函数名称
  • info local 显示当函数中的局部变量信息
  • info prog 显示被调试程序的执行状态
  • delete [n] 删除第n个断点
  • disable [n] 关闭第n个断点
  • enable [n] 开启第n个断点
  • ptype 显示结构定义
  • set variable 设置变量的值
  • call name(args) 调用并执行名为name,参数为args的函数
  • Finish 终止当前函数并输出返回值
  • return value 停止当前函数并返回value给调用者

3.GDB调试举例

  • 下面的代码实现对一个整型数的反转功能,比如输入123,则 输出321。
  • 但输入100时,程序的输出结果却不正确,请找出问题
  • 编写一个.c程序命名为SH.
    ubuntu中GDB的调试
    开始调试
    1).输入命令gcc -o SH -g SH.c生成SH文件

2).直接gdb SH
ubuntu中GDB的调试
ubuntu中GDB的调试
ubuntu中GDB的调试
3). Linux中,程序崩溃时,一般会产生core文件,记录进程退出前 的状态,调试段错误问题,借助于该文件,可快速定位问题。
可按如下步骤生成和使用core文件
– Step 1: 让系统产生core文件
• ulimit –c num #设定core文件容量(num为数字, 为0 是不产生core文件)
– Step 2: 运行程序,让程序崩溃,从而生成core文件
– Step 3: gdb配合core文件,定位问题
• gdb 程序名 core文件名 • 比如: gdb segDemo core

四、其他调试方法

  • 利用printf + 条件编译,来辅助调试。
  • 测试版:gcc –o mystrdup -DDEBUG 。
  • 发布版:gcc –o mystrdup 。
    这里就不放图了,自己去试。

五、心得

gdb的调试使我获益良多,对linxu的擦偶哦更加的熟练,对程序运行过程认识更加清晰。学习之路还很长,必须地更加努力才行。

六、资料引用

百度云链接
提取码:svea

相关文章:

  • 2021-10-08
  • 2022-12-23
  • 2021-06-12
  • 2021-07-06
  • 2021-08-07
  • 2022-01-08
  • 2021-10-10
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-10-17
  • 2022-12-23
  • 2021-11-24
  • 2022-12-23
  • 2021-05-14
相关资源
相似解决方案