一、为什么要产生core文件
程序总会遇到各种异常或者bug导致退出中止,但是程序却没有打印出可供参考的log信息,这时候就可以利用code文件进行分析。一般情况下,code文件会记录程序运行的内存,寄存器,堆栈指针等信息,想要使用code文件分析,就需要在linux系统中设置一下。
二、嵌入式core文件生成设置
其实总结起来就三步:
(1)解除限制:linux系统下core文件的生成设置默认是关闭的,所以要生成core文件首先要设置core文件的大小。
命令ulimit -a 可以看到和core文件相关的一些设置:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 3643
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 3643
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
可以看到第一行core file size 默认大小是0。这里要修改core文件的大小,可以根据自己的需要设置大小,一般设为1024即可。
具体的设置方法:ulimit -c 1024
-c :可以上面的设置中每一项后面的括号中都有一个参数,要设置xxx那一项,就ulimit -xxx size即可。
这里建议直接把ulimit -c 1024添加到 /etc/profile文件中。这样就不用没事reboot后要重新设置。
(2)修改core文件的格式和生成路径
执行下面两行命令:
echo 1 > /proc/sys/kernel/core_uses_pid
echo "/corefiles/core-%e-%p-%t" >> /proc/sys/kernel/core_pattern
(3) core文件调试
交叉编译程序后的程序拷贝到目标板上,运行行程序。这样会产生core文件。存放的目录是/corefiles目录下。
把core文件拷贝到Linux上,然后执行arm-linux-gdb ./test core-test