编译环境:Ubuntu16.04 64位
交叉编译工具:arm-hisiv500-linux-gcc

在开发过程中总会遇到段错误之类的问题,交叉编译gdb方便在开发板上调试,这里记录一下编译流程。

1. 交叉编译gdb

下载合适版本的gdb源码包,我这里使用的是gdb-7.8.tar.gz,点击下载地址

交叉编译gdb过程中发现这个版本需要termcap的支持,这里先表之,下载termcap-1.3.1.tar.gz,点击下载地址

1.1 交叉编译termcap

cd ~/work
mkdir gdb.install
tar zxf termcap-1.3.1.tar.gz
cd termcap-1.3.1/
./configure --host=arm-hisiv500-linux- --prefix=/home/jerry/work/gdb.install
make CC=arm-hisiv500-linux-gcc
cp libtermcap.a ../gdb.install

生成的libtermcap.a就是所依赖的库。

1.2 交叉编译gdb

cd ../gdb-7.8/
./configure --host=arm-hisiv500-linux CC=arm-hisiv500-linux-gcc --prefix=/home/jerry/work/gdb.install LDFLAGS="-L/home/jerry/work/gdb.install/ -ltermcap -lm"
make
make install

生成的gdb位于…/gdb.install/bin目录。

2. 开发板上gdb调试流程

2.1 core文件开关

开发板执行命令ulimit -c,为0表示关闭;
执行命令ulimit -c unlimited打开core文件输出,并不限制文件大小。
如果想开机执行,修改/etc/profile,添加如下命令:

ulimit -S -c unlimited > /dev/null 2>&1

2.2 core文件命名和保存路径

core文件名默认是core,建议修改如下:

echo "/tmp/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

命名的参数列表:
%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加命令名

2.3 调试

编译可执行程序时加入-g选项,如gcc -g core_test.c -o core_test
将之前编译生成的gdb拷贝到开发板

gdb [exec file] [core file] 然后执行bt看堆栈信息

转载请注明出处,如有错漏之处,敬请指正。

Logo

更多推荐