使用gdb进行调试

1 使用 gdb 进行调试

  gdb是一个功能很强大的调试器,它是一个自由软件,能够用在许多UNIX平台上。它同时也是Linux系统中的默认调试器。gdb已被移植到许多其他的计算机平台上,并且能够用于调试嵌入式实时系统.
  目前有几种典型的调试和测试Linux程序的方法。一般做法是先运行程序并观察其输出结果,如果不能正常工作,就需要决定应该采取哪些措施。可以修改程序然后重新尝试(代码检查-试运行-出错法),也可以在程序中增加一些语句来获得更多关于程序内部运行情况的信息(取样法),还可以直接检查程序的执行情况(受控执行法)。程序调试可以分为如下5个阶段:
① 测试:找出程序中存在的缺陷或错误。
② 固化:让程序的错误可重现。
③ 定位:确定相关的代码行。
④ 纠正:修改代码纠正错误。
⑤ 验证:确定修改解决了问题。

1.1 gdb 常用命令

  常见的调试程序的步骤如下:
gcc -g -o filename -Wall filename.c
gdb filename
l :显示代码(list)
b 4 :在第4行设置断点(breakpoint)
r :运行(run)
n :下一步不进入函数(next)
s :表示单步进入函数(step)
p i :打印变量i(print)
c :运行到最后(continue)
q :退出(quit)

1.2 gdb 命令调试列表

在这里插入图片描述

1.3 段错误

  运行产生段错误( segmentation fault)而被终止,就说明操作系统向程序发送了一个信号,告诉程序操作系统检测到了非法的内存访问,为防止内存空间被破坏,操作系统提前终止了该程序的运行。
  操作系统检测非法内存访问的能力,取决于它的硬件配置和它在内存管理实现方面的一些具体做法。在大多数系统中,操作系统分配给程序的内存一般都会比程序实际需要使用的大一些。如果非法内存访问出现在这部分内存区域内,硬件就可能检测不到,这就是并非所有版本的Linux和UNIX系统都会产生段错误的原因。
  当程序运行的时候出现了段错误,使用gdb可以进行调试:
① 首先,可以使用 ulimit -a 来查看当前系统的各项属性的大小限制。
ulimit -a
② 再使用 ulimit -c unlimited 设置core file size 为不限制大小。
ulimit -c unlimited
③ 设置完毕后,可以通过 ulimit -a 来检查是否设置成功。
ulimit -a
④ 再次运行程序,会产生core文件,通过gdb可执行程序core文件,进行调试。直接通过bt可以看到程序段错误时的现场。
gdb ./file core

在这里插入图片描述

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我还记得那天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值