《gdb调试之基础篇》

本文详细介绍了gdb的基础用法,包括调试可执行文件和coredump,以及gdb支持的语言和启动选项。通过一个简单的实例,阐述了如何使用gdb解决内存错误,如越界和free错误。此外,还提到了gdb的内部命令和shell命令的使用,以及glibc内存管理的理解。
摘要由CSDN通过智能技术生成

        这篇文章通过一个简单的实例描述了gdb的基本用法,并对gdb支持的语言极其基本选项进行了介绍。对于有一定经验的建议看下一篇文章:《gdb调试之实用技巧篇》

1. gdb介绍

        gdbGNU发布的一款功能强大的程序调试工具,它可以让我们深入洞悉一个程序是怎么运行的,也可以帮我们记录一个程序在崩溃的时候所执行的操作。具体一点它可以帮我们完成下面四件事情

  • 启动我们的程序,并指定任何可以影响程序执行的条件。
  • 设置断点,让我们的程序停止在某处,然后查看堆栈是否正常。
  • 追踪程序出错时执行的代码。
  • 在程序运行中,调整参数,以测试潜在的bug

       就具体调试方法而言,根据使用场景不同,gdb调试可分为三种类型

  • 调试一个可执行文件
  • 调试一个coredump文件
  • 调试一个正在运行的进程

2. 一个简单的实例

       实际应用的时候,遇到的情况可能是千差万别的,也远比下面所要举的例子更加复杂和困难。这里先针对gdb三种调试类型的前两种举一个简单的实例,以期带你走进gdb的调试世界。下面的测试代码,先从终端输入两个字符串,然后再将其输出到终端。

编译执行

      编译上面的代码并执行,结果发现程序的输出结果不对,输入给b的内容本来是”01234”,但是输出的时候却变成了”ghijk”,而且发生了core dump(这里省略了glibc输出的memory map信息)。如下所示:

调试可执行文件

       可执行文件的调试参考附录A,从中我们知道字符串a的赋值后,b也被改变了。因为给a赋值的时候超过了给a开辟的空间长度。

调试coredump文件

       调试core文件的命令格式为:gdbPROGRAM CORE。根据gdb调试core文件的信息,可以知道发生core dump时程序正在执行的操作为test.c中的第18行代码,即free操作。

       综合上述信息,可知道b的输出错误是因为a赋值越界引起的,而产生coredump的原因是free出错。至于为什么free出错,其实也是因为a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值