对于嵌入式Linux工程师来说,在工作中经常遇到段错误,而其中调试段错误的最好方式就是core_dump调试。core_dump调试要满足几个条件:
1、ulimit -c unlimited,取消core file的大小限制;
2、echo /proc/sys/kernel/core_pattern >mydir,设置生成core的目录;
3、代码中取消singal相关的信号注册函数,
但是很多段错误是发生在设备启动的过程中,所以这时候就需要在相关的脚本中设置在几个命令,由于环境变量的关系发现直接在脚本中设置是不生效的,这时候就需要按照如下方式进行设置:
echo ulimit -c unlimited >>/etc/profile
source /etc/profile
此时在执行ulimit -a就会得到以下结果:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7760
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) 7760
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
说明在环境变量中设置成功。接下来就可以生成core文件使用GDB进行分析文件了,定位到产生段错误的原因。