什么什么01
2015-08-22 20:14
555 查看
段错误
所谓的段错误就是指访问(access)的内存超出了系统所给这个程序的内存空间,也就是访问了不该访问的地址。 为什么叫段错误呢, 因为内存是操作系统一段一段来分配做不同用途的,你访问到不属于你的那一段了,所以叫段错误。
怎么能产生段错误呢?
比如01, 数组访问越界 int a[9], 你定义这么一个数据,但是访问 a[9] 就内存越界了。
比如02, 指针,你把指针指向一个未知的地方,然后给那里写数据,就可能引发段错误。
并不是 你访问越界就一定会引发段错误 , 如果你越界的这个位置不太严重,可能系统就检测不到,但你读写的数据就不对了,可能更可怕。
core文件
核心转储, 会生成一个core文件,这是程序在不正常结束时,为了方便以后的调试,产生的一个内存快照,使用gdb这样的工具可以调试,追踪问题。
如果你的程序段错误退出了,却没有产生这种core文件,可能是因为系统禁止了。
比如你的系统当前设置的core文件最大值是0, 那是生成不了core文件的。
生成core文件是为了调试的,但这有什么不好的影响呢?
比如你的服务占用内存很大,核心转储一次 需要生成一个3G大小的内存镜像,这时
第一,你的系统负载会突然很高
第二,生成这个文件耗时很长才能写到磁盘上,如果你提供的是繁忙的网络服务,这时服务会收到影响
第三,如果生成许多这样的文件,会占用很多磁盘空间。
所谓的段错误就是指访问(access)的内存超出了系统所给这个程序的内存空间,也就是访问了不该访问的地址。 为什么叫段错误呢, 因为内存是操作系统一段一段来分配做不同用途的,你访问到不属于你的那一段了,所以叫段错误。
怎么能产生段错误呢?
比如01, 数组访问越界 int a[9], 你定义这么一个数据,但是访问 a[9] 就内存越界了。
比如02, 指针,你把指针指向一个未知的地方,然后给那里写数据,就可能引发段错误。
并不是 你访问越界就一定会引发段错误 , 如果你越界的这个位置不太严重,可能系统就检测不到,但你读写的数据就不对了,可能更可怕。
core文件
核心转储, 会生成一个core文件,这是程序在不正常结束时,为了方便以后的调试,产生的一个内存快照,使用gdb这样的工具可以调试,追踪问题。
如果你的程序段错误退出了,却没有产生这种core文件,可能是因为系统禁止了。
[code] ulimit -c 查看当前设置的生成core文件的最大值。 ulimit -c 0 不产生core文件 ulimit -c 100 设置core文件最大为100k ulimit -c unlimited 不限制core文件大小
比如你的系统当前设置的core文件最大值是0, 那是生成不了core文件的。
生成core文件是为了调试的,但这有什么不好的影响呢?
比如你的服务占用内存很大,核心转储一次 需要生成一个3G大小的内存镜像,这时
第一,你的系统负载会突然很高
第二,生成这个文件耗时很长才能写到磁盘上,如果你提供的是繁忙的网络服务,这时服务会收到影响
第三,如果生成许多这样的文件,会占用很多磁盘空间。
相关文章推荐
- 获得二叉树深度的非递归实现
- 程序员笔试面试常见题总结,更新ing
- poj 1698 二分图多重匹配
- 位级运算的一些事
- Android-基本控件(AutoCompleteTextView,MultiAutoCompleteTextView,ToggleButton)
- 路径(path)题解
- 杭电ACM1425——sort~~水题
- 获取客户端IP
- MySQL必知必会(汇总数据, 聚集函数)
- POJ 1995 Raising Modulo Numbers【快速幂】
- 学习笔记 post和get的区别
- poj 1258 最小生成树 prim
- hdu 1017 A Mathematical Curiosity
- hdu1576 A/B
- Java Map接口LinkedHashMap
- socket编程--socket基本概念
- C#值类型与引用类型
- POJ2431 Expedition
- mysql 纸 mysql_fetch_array OR mysql_fetch_assoc OR mysql_fetch_row
- Mysql和SqlServer互相转换