博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux 下gdb调试——定位程序崩溃位置_铽可喏_新浪博客
阅读量:4195 次
发布时间:2019-05-26

本文共 787 字,大约阅读时间需要 2 分钟。

当程序出现错误,可使用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文件:
图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图形前端,使用更简单。

转载地址:http://opwli.baihongyu.com/

你可能感兴趣的文章
屏蔽UITextView 中文字选择功能的方法
查看>>
如果使用UITextView来显示的大篇内容排版混乱,该怎么办?
查看>>
如何实现对UITextField ,UITextView等输入框的 字数限制
查看>>
iphone 自定义控件,通讯录,网络,电子书,控件特效 等源码
查看>>
In-App Purchases入门
查看>>
一些iOS高效开源类库
查看>>
UITextView使用 sizeWithFont:constrainedToSize:lineBreakMode:计算自适应文本高度
查看>>
修改UITableView背景图片
查看>>
UITextView内容显示不全或空白问题
查看>>
GCD介绍(三): Dispatch Sources
查看>>
GCD介绍(一): 基本概念和Dispatch Queue
查看>>
GCD介绍(二): 多核心的性能
查看>>
GCD介绍(四): 完结
查看>>
用 cocos2d 创建帧动画
查看>>
Integrating AdMob with Cocos2D-iPhone Applications
查看>>
didRecevieMemoryWarning 和 ViewDidUnload
查看>>
在代码中使用Game Center Learderboard的操作
查看>>
Objective-C block
查看>>
Xcode分析CrashLog的方法
查看>>
了解并解决代码签名问题
查看>>