最近定位了几个Segmentation Fault的bug,于是对Core Dump的知识点进行了深度挖掘,总结如下:
1. Core Dump包含了程序运行时的内存、寄存器状态、堆栈指针和内存管理信息
2. 产生的原因不外乎如下几个
@内存访问越界
#使用错误的数组下标,导致数组访问越界
#字符串没有使用正常的结束符
#使用strcpy, strcat, sprintf.....字符串操作函数,将目标字符串读/写爆,建议使用strncpy等系列函数
@多线程程序使用了线程不安全函数(即使用了不可重入函数)
@多线程读写数据未注意同步操作,要加锁保护
@非法指针 如使用空指针、随意使用指针转换
对于随意使用指针转换,因为一个指向一段内存的指针,除非确定这段内存原先就分配为某种结构或类型,否则不要将它转换为此类型的指针,而是将这段内存拷贝到一个这种类型的结构或类型中再访问,因为如果这段内存的开始地址不是按照此种结构或类型对齐的,那么访问它时会出现buserror而导致coredump
@堆栈溢出,对于堆栈溢出,我们不要使用大的局部变量,或者过深的递归调用。