【Linux 下gdb调试——定位程序崩溃位置】

当程序出现错误,可使用gdb在线调试,以下举一个简单例子说明,如何定位程序。
1.创建一个文件gdb_test.c,输入以下代码。代码中的第5行,使用了未初始化为有效值的指针,运行过程中肯定是会出错的。

1 #include “stdio.h”
2
3
4 int main()
5 {
6 int b = 0;
7 b = 10;
8 printf("
****** b = %d ************ ",*b);
9 }

2.编译源码,生成可执行文件gdb_test。增加参数-g 可为调试过程提供更多有效的信息,如更准备定位当前崩溃位置。gdb过程中用list能崩溃附近的代码。
gcc -o gdb_test -g gdb_test.c

3.先直接运行gdb_test程序,由于b未初始化为有效值,运行时会出现段错误。

在这里插入图片描述
图1

4.接下来用GDB 来对该程序进行调试
1). 先启动GDB 并装载gdb_test文件:

!](https://img-blog.csdnimg.cn/eacd0ad64c9f4d668001f4597aeb5ee8.png)

图2

2). 在gdb提示命令符号后,输入run命令,执行已经装载的gdb_test文件,可看到崩溃的提示信息。这个程序比较简单,崩溃的信息中已经直接说明在哪个文件的哪一行。如果还是无法定位,接着往下看:

在这里插入图片描述
图3

3). 输入where 命令,查看程序可能出错的地方。
在这里插入图片描述

图4
根据提示,可能第7行有问题。

4). 输入list命令,查看第7行附近的代码
在这里插入图片描述

图5

5). 用break命令,在第7行处设置断点.
在这里插入图片描述

图6

6).输入run命令,重新运行程序,程序运行到第7行处停止运行,
在这里插入图片描述

图7

在这里只有一个变量赋值,唯一可能导致出错的就是这个变量b。

7). 输入print命令查看b的值
在这里插入图片描述

图8

由此可见,b是空指针。

另外说明:

  • 在GDB命令提示符后,直接按回车键为重复上一次的命令。
  • DDD 是一个简洁的GDB图形前端,使用更简单。
  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值