Linux 下的C程序常常会因为内存访问错误等原因造成segment fault(段错误),此时如果系统core dump功能是打开的,那么将会有内存映像转储到硬盘上来,之后可以用gdb对core文件进行分析,还原系统发生段错误时刻的堆栈情况。这对于我们发现 程序bug很有帮助。

使用ulimit -a可以查看系统core文件的大小限制;使用ulimit -c [kbytes]可以设置系统允许生成的core文件大小,例如

ulimit -c 0 不产生core文件

ulimit -c 100 设置core文件最大为100k

ulimit -c unlimited 不限制core文件大小

先看一段会造成段错误的程序:

#include

int main()

{

char *ptr="linuxers.cn";

*ptr=0;

}

编译运行后结果如下:

[leconte@localhost test]$ gcc -g -o test a.c

[leconte@localhost test]$ ./test

段错误

此时并没有产生core文件,接下来使用ulimit -c设置core文件大小为无限制,再执行./test程序,结果如下:

[leconte@localhost ~]$ ulimit -a

core file size (blocks, -c) 0

[leconte@localhost test]$ ulimit -c unlimited

[leconte@localhost test]$ ulimit -a

core file size (blocks, -c) unlimited

[leconte@localhost test]$ ./test

段错误 (core dumped)

[leconte@localhost test]$ ls -al core.*

-rw------- 1 leconte leconte 139264 01-06 22:31 core.2065

可见core文件已经生成,接下来可以用gdb分析,查看堆栈情况:

[leconte@localhost test]$ gdb ./test core.2065

GNU gdb Fedora (6.8-27.el5)

Copyright (C) 2008 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law. Type "show copying"

and "show warranty" for details.

This GDB was configured as "i386-redhat-linux-gnu"...

warning: exec file is newer than core file.

warning: Can't read pathname for load map: Input/output error.

Reading symbols from /lib/libc.so.6...done.

Loaded symbols for /lib/libc.so.6

Reading symbols from /lib/ld-linux.so.2...done.

Loaded symbols for /lib/ld-linux.so.2

Core was generated by `./test'.

Program terminated with signal 11, Segmentation fault.

[New process 2065]

#0 0x0804836f in main () at a.c:6

6 *ptr=0;

从上述输出可以清楚的看到,段错误出现在a.c的第6行,问题已经清晰地定位到了。

很多系统默认的core文件大小都是0,我们可以通过在shell的启动脚本/etc/bashrc或者~/.bashrc等地方来加入 ulimit -c 命令来指定core文件大小,从而确保core文件能够生成。

除此之外,还可以在/proc/sys/kernel/core_pattern里设置core文件的文件名模板,详情请看core的官方man手册。

转载于:https://www.cnblogs.com/siikee/articles/4306759.html

【转】Linux下发生段错误时如何生成core文件相关推荐

  1. Linux下发生段错误时如何产生core文件-转

    Linux下的C程序常常会因为内存访问错误等原因造成segment fault(段错误),此时如果系统core dump功能是打开的,那么将会有内存映像转储到硬盘上来,之后可以用gdb对core文件进 ...

  2. Linux下的段错误产生的原因及调试方法-转

    分类: Linux--Ubuntu入门级 重学C/C++2011-10-19 22:13 332人阅读 评论(0) 收藏 举报 因为你调用了glibc的fputs 检查你传进去的char* +++++ ...

  3. linux程序运行段错误,Linux下的段错误产生的原因及调试方法

    Linux下的段错误产生的原因及调试方法 简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来 说,段错误就是指访问的内存超出 ...

  4. Linux下的段错误调试方法

    转自http://wenku.baidu.com/view/7416d23710661ed9ad51f33f.html 执行socket文件时,出现段错误 (core dumped) 产生段错误就是访 ...

  5. linux at24c 前几个字节错误,Linux下的段错误产生的原因及调试方法

    简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由 ...

  6. linux 捕获sigsegv信息如何生成core文件,[转]Linux下的段错误产生的原因及调试方法Core Dump...

    简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由 ...

  7. linux java 段错误的是,Linux下的段错误产生的原因及调试方法 转

    1楼 简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个 ...

  8. C/C++编程:linux下的段错误(Segmentation fault)产生的原因及调试方法(经典)

    简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一 般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是 ...

  9. Linux下的段错误(Segmentation fault)产生的原因及调试方法

    段错误 就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一 般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来 ...

  10. Linux 脚本执行遇到错误时中止,shell 文件内容替换 sed用法

    Linux 脚本执行遇到错误时中止, shell 脚本中 : set -x 是开启,   set +x是关闭  , set -e  表示有报错即退出, set  +e  表示关闭这种设置.  set ...

最新文章

  1. Kncok之绑定事件
  2. 【Java学习笔记二】继承和多态
  3. 【Python】Matplotlib利用指数函数的向量及其逆向向量绘图
  4. Linux 牛书推荐:《Linux网络编程》
  5. 正态分布某一点的概率怎么算_正态分布的抽卡概率算法
  6. linux文件名格式,ASM文件名格式
  7. 构建者模式和抽象工厂模式的结合使用
  8. 解决联想笔记本 FN键不起作用的方法
  9. android obtain,Android 模拟Message.obtain(),构建自己的缓存池
  10. threejs特效:选中效果
  11. 9月赠书活动名单公布啦!
  12. Vue element怎么获取table表格当前行数据和索引值
  13. 10套word版个人简历模板,各种风格个人简历模板
  14. 如何在抖音主页添加官方联系电话?
  15. 基于管道过滤器风格的-KWIC
  16. 自动问答研究进展、现状及趋势
  17. 木马核心技术剖析读书笔记之木马技术的发展趋势
  18. Python实现素描画
  19. 2022年电工(初级)考试试题及在线模拟考试
  20. arm板上通过内核实现可滑动的电子相册

热门文章

  1. 排序算法专题-冒泡排序
  2. Windows开发——内存读写API
  3. sumo添加车辆_SUMO 交通控制接口 —— TraCI
  4. Flutter BindingBase服务扩展浅析
  5. linux 编辑文件 cat 跳到指定行,Linux文件操作详解(八)--文件的创建和编辑(vi/vim命令和cat命令)...
  6. mysql存储过程详细教程6_存储过程详解(示例代码)
  7. 华为慧通和华为区别_华为P30与华为P30 pro 的区别
  8. ie型lfsr_什么是PRBS
  9. php resize函数,Php Image Resize图片大小调整的函数代码
  10. mongodb 日期分组聚合_如何在MongoDB中按其他字段分组时聚合时间序列数据?