ubuntu中GDB的调试

本文详细介绍了GDB调试器的基础概念、启动方法、关键命令,以及如何通过GDB查找并修复代码错误。涵盖了断点设置、变量监控、代码跟踪等实用技巧,并分享了利用printf和条件编译进行辅助调试的方法。阅读本文将提升Linux下程序调试能力。
摘要由CSDN通过智能技术生成

一、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

在这里插入图片描述

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.
    在这里插入图片描述
    开始调试
    1).输入命令gcc -o SH -g SH.c生成SH文件

2).直接gdb SH
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值