问题描述
Linux上运行C程序发生段错误后,没有core文件生成,调试不便。
生成core文件步骤
- 敲ulimit -a,查看系统core文件大小限制,如第一行core file size值为0,表示没打开core文件设置
- 敲ulimit -c [kbytes], 设置系统允许生成的core文件大小, 如:
1
2
3ulimit -c 1024 设置core文件最大为1024K
ulimit -c unlimited 不限制core文件大小
ulimit -c 0 不生成core文件 - 运行C程序,段错误后,在当前目录生成core文件。
问题:
多次运行程序发生段错误后,新生成的core文件会把旧的core文件覆盖,怎么区分并保留多个core文件?
解决方法:
敲 echo 1 > /proc/sys/kernel/core_uses_pid, 将每次产生的core文件的文件名中是否添加pid作为扩展。如果添加则文件内容为1,反之为0。
如上图,两次coredump后,会根据pid生成不同的core文件。
指定core文件的输出格式和路径
1 | echo /path/to/core.%t.%e.%p > /proc/sys/kernel/core_pattern |