Chinaunix首页 | 论坛 | 博客
  • 博客访问: 623672
  • 博文数量: 138
  • 博客积分: 3067
  • 博客等级: 中校
  • 技术积分: 1565
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-21 12:44
文章分类

全部博文(138)

文章存档

2016年(5)

2014年(4)

2012年(1)

2011年(2)

2010年(10)

2009年(19)

2008年(97)

我的朋友

分类: LINUX

2008-03-22 18:30:36

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()
 
阅读(663) | 评论(0) | 转发(0) |
0

上一篇:QT中的常用数据结构

下一篇:QT ui文件介绍

给主人留下些什么吧!~~