嵌入式ubuntu上折腾安装coredump

ubuntu版本是16.04,内核版本是3.10.96,处理器为4核ARMv8.

(1)首先确定内核支持

 确定内核打开了CONFIG_ELF_CORE编译选项,对于一般的PC机,是默认支持的,但对嵌入式的Linux板子就不一定了.

 使用的板子在配置了ulimit -c之后打开了coredump使能,每次文件崩溃会显示:

                                       This is coredump test!

                                        段错误 (核心已转储)

但是始终找不到core文件.最后跟到内核发现do_coredump函数已经调用.这说明coredump前端已经调用,后面因为某种原因失败了.在函数的异常处理分支中添加打印,最终发现的current->mm->linux_binfmt->core_dump函数为空,该函数负责讲进程的执行现场以core文件的格式存储到core文件中去,跟到最后,发现是CONFIG_ELF_CORE内核编译选项没有打开所致.打开之后,重新编译替换ubuntu内核之后,在ulimit -c 1024 打开coredump,coredump可以在自己的测试程序崩溃后正常工作.

(2)ulimit -c unlimit

完成前面工作之后,coredump可以在自己的测试程序崩溃之后可以正常工作了.但在使用了公司的现场的应用之后,还是不能正程工作.折腾了半天,仔细想了想,自己的test的coredump可以工作说明coredump工作机制应该没问题.现场应用和自己的测试程序的差别是可执行文件比较大,初步想到了,coredump资源开的不够大.ulimit -c unlimited之后,现场应用coredump也可以正常工作.

(3)echo "ulimit -c unlimited" >> /etc/profile

永久生效.





你可能感兴趣的:(学习笔记,coredump,嵌入式)