core dump(核心转储/吐核):是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写出的一个磁盘文件。这种信息往往用于调试。
C/C++程序常见coredump总结:
- 无效指针引起的程序coredump,大致可以分为4种原因引起异常。
(1)对空指针进行了操作。
(2)对一个未初始化的指针进行了操作。
(3)对一个已经调用了delete释放了内存的指针再次调用了delete去重复释放。
(4)多线程访问全局变量,导致内存值异常。 - 指针越界引起的coredump。
- 操作系统相关的特殊性造成的coredump。(字节对齐方式不同;编译器,链接参数)
注:
- 存放Coredump的目录即进程的当前目录。(1)/proc/sys /kernel/core_uses_pid可以控制core文件的文件名中是否添加pid作为扩展。(2)proc/sys/kernel/core_pattern可以控制core文件保存位置和文件名格式。
- core文件的生成开关和大小限制:
ulimit -c unlimited
。 - 在配置文件
/etc/sysctl.conf
中增加kernel.core_pattern=core.%p
,然后执行命令sysctl -p
应用这个设置。 - 用gdb查看core文件:
gdb [exec file] [core file]
。