segment fault 定位 与 远程 gdb
远程 GDB
首先 ,Target 为 ARM开发板 (IP = 192.168.1.200),HOST 为 Ubuntu 14.04 虚拟机 (IP = 192.168.1.4)
1. 下载 gdb源码 http://ftp.gnu.org/gnu/gdb/
2. 解压后利用交叉编译工具链 ,对 gdb 源码交叉编译。i ./configure --host=aarch64-poky-linux --prefix=/home/install ii make iii make install
3.拷贝 /home/install 下编译产物到 开发板的根文件目录/usr/ 下 ,我的是 /exports/rfs/usr/
4. 交叉编译 应用程序 hello.c $CC -g -o hello hello.c 拷贝hello 到 /export/rfs/下
5. 给开发板上电 ,进入控制台,执行 , 其中 192.168.1.4:1234 为 Host IP 地址 : port 口
root@mint:/# gdbserver 192.168.1.4:1234 ./hello Process ./hello created; pid = 2267 Listening on port 123
6. 在 HOST 平台上执行 $GDB /exports/rfs/hello 进入:
0x0000ffffb7fd2d00 in ?? () from target:/lib/ld-linux-aarch64.so.1 (gdb)
输入 (gdb) target remote 192.168.1.200:1234 (192.168.1.200:1234 为TARGET IP 地址 和相同的port口)
7. 在 main 入口处打断点 (gdb)break main
8. 开始 debug (gdb)continue
至此完成 远程 调试 开发板 。
segment fault 定位
运行应用程序的时候,遇到最多的问题就属 segment fault 了,下面介绍如何利用 core 文件 定位 segment fault 。
1. 设置 core dump 的路径在 /tmp 目录下 文件名为 core+ 程序名 : echo "/tmp/core-%e-%p" > /proc/sys/kernel/core_pattern
2. 设置 core 文件的大小限制 ulimit -c unlimited
3. 运行 出错的应用程序 ./ xxxxx
4. 报出segment fault 后就可以在 /tmp/下查看到 core-xxxxx-xxx 文件
5. 把core 文件拷贝出来放在 根目录下 /
6. 在 PC 上 利用 $GDB /exports/rfs/xxxxx core-xxxxx-xxx 就可以 显示出错代码的位置了。
$(GDB) 为 (交叉编译 gdb)