Linux下段错误产生的原因及调试方法
段错误原因:访问了错误的内存区
1.访问内存区越界
2.访问系统数据区(常见的就是访问地址0)
一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是segmentation fault就出现了.
调试方法:
1.使用GDB 的 bt命令查看
2.程序中捕获SIGSEGV信号,并调用gdb调试
3.利用glibc提供的可以dump栈的函数(/usr/include/execinfo.h)backtrace()backtrace_symbols()
阅读(673) | 评论(0) | 转发(0) |