segmentation fault的中文解释

所谓的段错误 就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表, 后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中 就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界访 问,cpu就会产生相应的异常保护,于是segmentation fault就出现了

查看原因

1、生成core文件。

# 查询core file size
ulimit -a

# 把core文件大小设置为无限制
ulimit -c unlimited

# 把core文件的生成路径写入到 /proc/sys/kernel/core_pattern 中,这里普通用户可能权限不够,最好另开一个root终端执行
# 前面的路径为core文件生成的路径,可以选择当前工作目录,或是在指定的地方
echo "/home/chen-c/otherweb/elegantWebServer/core-%e" > /proc/sys/kernel/core_pattern

2、重新运行出错的程序,等待出现段错误,这个时候就会生成core文件

3、这里假设可执行程序为a.out,执行。即可查看出现段错误的大概位置。

gdb a.out your_core_path