硬件软件系统方案应用范例智能车大赛技术支持学习园地关于我们恩智浦官网

Core Dump应用案例

1.      Core dump的作用和kernel配置

Core dump是用来对用户程序在崩溃或异常终止时,程序状态的记录,包括cpu寄存器(pc指针,栈指针等),内存、堆栈等,会生成一个core文件。

当前开发板使用的linux版本为L6.1.36,默认kernel已经使能core dump配置,系统启动后执行如下命令可以看到相关的配置已经设置了y。

root@imx8mpevk:~# zcat /proc/config.gz | grep COREDUMP

CONFIG_COREDUMP=y

CONFIG_WANT_DEV_COREDUMP=y

CONFIG_ALLOW_DEV_COREDUMP=y

CONFIG_DEV_COREDUMP=y

2.      设置生成core文件的大小

以1中预定的开发板为例,执行ulimit -c可以看到core文件大小默认设置了0。执行ulimit -c unlimited重新设置为无限大

                   

3.      产生core dump文件

下面写一段简单程序,制造程序崩溃的现象。

root@imx8mpevk:~#vi coredump_test.c

输入如下程序:

#include <stdio.h>

char *str = "Cloud";

int main(){

       str[0] = 'L';

       return 0;

}

编译:

root@imx8mpevk:~# gcc -g coredump_test.c -o coredump_test

执行生成的coredump_test测试程序,会出现以下log。

root@imx8mpevk:~# ./coredump_test

[ 1136.707450] audit: type=1701 audit(1677838081.224:20): auid=4294967295 uid=0 gid=0 ses=4294967295 pid=1669 comm="coredump_test" exe="/home/root/coredump_test" sig=11 res=1

Segmentation fault (core dumped)

可以看到程序报了Segmentation fault,然后崩溃,ls命令查看当前文件夹下有core.1669生成,1669是进程id,每次执行这个值会不一样。

4.      分析coredump结果

通过板子gdb命令调试回溯程序崩溃原因,执行log如下:

 

 

Gdb调试执行之后,输入bt命令,可以看到堆栈信息,是因为程序第4行代码导致的崩溃。原因在于不能直接通过赋值操作符(=)来给它赋予一个新的字符。