1、何为core dump
当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump
1、core dump 产生的原因
- 内存访问越界 (数组越界、字符串无\n结束符、字符串读写越界)
- 多线程程序中使用了线程不安全的函数,如不可重入函数
- 多线程读写的数据未加锁保护(临界区资源需要互斥访问)
- 非法指针(如空指针异常或者非法地址访问)
- 堆栈溢出
2、busybox 默认情况下,ulimit 是隐藏的, 开启使用如下命令
ln -s /bin/busybox /bin/ulimit
ulimit -c unlimited
3、修改core dump 保持位置, 由于嵌入式系统Flash 空间有限, 可以将位置修改指向SD 卡, 或者NFS 目录
echo /mnt/mmcblk0p1/%e.%p.%s.%t.core > /proc/sys/kernel/core_pattern
通配符解释:
- %% 单个%字符
- %p 所dump进程的进程ID
- %u 所dump进程的实际用户ID
- %g 所dump进程的实际组ID
- %s 导致本次core dump的信号
- %t core dump的时间 (由1970年1月1日计起的秒数)
- %h 主机名
- %e 程序文件名