Chinaunix首页 | 论坛 | 博客
  • 博客访问: 226452
  • 博文数量: 42
  • 博客积分: 2618
  • 博客等级: 少校
  • 技术积分: 385
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-26 10:04
文章分类

全部博文(42)

文章存档

2013年(2)

2012年(2)

2011年(3)

2010年(17)

2009年(18)

我的朋友

分类: LINUX

2010-02-26 14:24:50

在linux中,如果开启了core,那么,发生segment fault时,会有core文件产生。只要segment fault没有造成栈帧错误,根据core文件和debug版本的程序就很容易找到产生segment fault的代码行。

core文件使用方法如下:
1. 编译程序,要使用-g选项。为方便查找出问题的代码行,最好-static选项也加上。当然,前提是用到的库有静态链接的版本
 2. 开启core, 使用ulimit -c xxx。xxx 可以是任意数,大点就可以了,比如100000
3. 运行有问题的程序,产生core文件
4. 执行gdb program core
这里 program是有问题的程序,core是core文件
 进入后执行bt,就可以看到程序是在哪一行crash的。当然,前提是栈帧没有被破坏掉。像缓冲区溢出就很容易覆盖返回地址而破坏栈帧。像scanf("%d", xxx),如果xxx不小心写成了变量名,而没有取地址,栈帧就破坏了。
可以用up和down命令进入caller和callee的栈帧,进去后用p xxx查看变量值,一般就可以找到出错的地方了。


gdbserver使用
1. 目标板上./gdbserver ip:port program
2. pc上arm-linux-gdb program
进入后
set debug remote 1
target remote ip:port
阅读(1791) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~