在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) |