在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。
 

1.core文件的生成开关和大小限制

 
  (1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。 
  (2)使用ulimit -c filesize命令,可以限制core文件的大小(filesize的单位为kbyte)。例如使用ulimit -c 1000将会把core文件限制为1000KB。如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的core文件,在调试此core文件的时候,gdb会提示错误。
  (3)使用ulimit -c unlimited,则表示core文件的大小不受限制。 
  (4)可以将ulimit -c unlimited写入到.bashrc中。 
 

2.core文件生成路径

 
  默认为输入可执行文件运行命令的同一路径下。若系统生成的core文件不带其它任何扩展名称,则全部命名为core。新的core文件生成将覆盖原来的core文件。
  如何查询和修改Linux操作系统生成core dump文件的默认路径? 
  方法1:cat /proc/sys/kernel/core_pattern
  方法2:/sbin/sysctl kernel.core_pattern

  

3.控制core文件的文件名中是否添加pid作为扩展

 
  这个文件/proc/sys/kernel/core_uses_pid可以控制core文件的文件名中是否添加pid作为扩展。文件内容为1,表示添加 pid作为扩展名,生成的core文件格式为core.xxxx;为0则表示生成的core文件同一命名为core。可通过以下命令修改此文件:echo "1" > /proc/sys/kernel/core_uses_pid
 

4.修改core dump文件保存路径和文件名格式

 
  方法1:临时修改:修改/proc/sys/kernel/core_pattern文件,但/proc目录本身是动态加载的,每次系统重启都会重新加载,因此这种方法只能作为临时修改。
  echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern,可以将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳
 
  方法2:永久修改:使用sysctl -w name=value命令。 
  /sbin/sysctl -w kernel.core_pattern=/corefile/core-%e-%p-%t 

5.为了更详尽的记录core dump当时的系统状态,可通过以下参数来丰富core文件的命名

%% - 单个%字符
%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间(由1970年1月1日计起的秒数)
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加命令名(程序文件名)

6.运行示例

kk@ubuntu:~/Desk/python/day5-27$ echo "1" > /proc/sys/kernel/core_uses_pid
bash: /proc/sys/kernel/core_uses_pid: 权限不够
kk@ubuntu:~/Desk/python/day5-27$ su
密码:
root@ubuntu:/home/kk/Desk/python/day5-27# echo "1" > /proc/sys/kernel/core_uses_pid
root@ubuntu:/home/kk/Desk/python/day5-27# cd /proc/sys/kernel/
root@ubuntu:/proc/sys/kernel# echo "/tmp/core-%e-%p-%t" > core_pattern
root@ubuntu:/proc/sys/kernel# cd -
/home/kk/Desk/python/day5-27
root@ubuntu:/home/kk/Desk/python/day5-27# exit
exit
kk@ubuntu:~/Desk/python/day5-27$ ll /tmp/
kk@ubuntu:~/Desk/python/day5-27$ ll /tmp/core-a.out-3173-1401287037
-rw------- 1 kk kk 413696 5月 28 22:23 /tmp/core-a.out-3173-1401287037
kk@ubuntu:~/Desk/python/day5-27$ gdb ./a.out /tmp/
/tmp/at-spi2 /tmp/ssh-UTCTvudG1989
/tmp/core-a.out-3173-1401287037 /tmp/unity_support_test.1
/tmp/ibus.log /tmp/VMwareDnD
/tmp/.ICE-unix /tmp/vmware-kk
/tmp/keyring-q0k3an /tmp/vmware-root
/tmp/pulse-2L9K88eMlGn7 /tmp/.X0-lock
/tmp/pulse-PKdhtXMmr18n /tmp/.X11-unix
/tmp/pulse-Y400HBNSM00c
kk@ubuntu:~/Desk/python/day5-27$ gdb ./a.out /tmp/core-a.out-3173-1401287037
 

Linux中如何产生core文件?的更多相关文章

  1. Linux中/proc目录下文件详解

    转载于:http://blog.chinaunix.net/uid-10449864-id-2956854.html Linux中/proc目录下文件详解(一)/proc文件系统下的多种文件提供的系统 ...

  2. Linux中/proc目录下文件详解(转贴)

      转载:http://www.sudu.cn/info/index.php?op=article&id=302529   Linux中/proc目录下文件详解(一) 声明:可以自由转载本文, ...

  3. <实训|第十一天>学习一下linux中的进程,文件查找,文件压缩与IO重定向

    [root@localhost~]#序言 在今后的工作中,运维工程师每天的例行事务就是使用free -m,top,uptime,df -h...每天都要检查一下服务器,看看是否出现异常.那么今天我们就 ...

  4. 在本机eclipse中创建maven项目,查看linux中hadoop下的文件、在本机搭建hadoop环境

    注意 第一次建立maven项目时需要在联网情况下,因为他会自动下载一些东西,不然突然终止 需要手动删除断网前建立的文件 在eclipse里新建maven项目步骤 直接新建maven项目出了错      ...

  5. Linux中删除特殊名称文件的多种方式

    今日分享:我们在肉体的疾病方面花了不少钱,精神的病害方面却没有花什么,现在已经到了时候,我们应该有不平凡的学校.--<瓦尔登湖> 前言 我们都知道,在linux删除一个文件可以使用rm命令 ...

  6. linux中增加swap分区文件的步骤方法

     一.swap交换分区 Swap分区在系统的物理内存不够用的时候,把硬盘空间中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临 ...

  7. 在Linux中要修改一个文件夹或文件的权限

    在Linux中要修改一个文件夹或文件的权限我们需要用到linux chmod命令来做,下面我写了几个简单的实例大家可参考一下. 语法如下: chmod [who] [+ | - | =] [mode] ...

  8. Linux环境崩溃生成core文件以及调试

    Linux环境崩环境溃生成core文件以及调试 gdb结合coredump定位崩溃进程 Linux 使用core file文件快速定位程序崩溃代码行 http://www.cnblogs.com/ha ...

  9. Linux 下段错误 core文件

    什么是core dump? core的意思是内存,dump的意思是扔出来,堆出来:当一个程序奔溃时,在进程当前工作目录的core文件中复制了该进程的存储图像.core文件仅仅是一个内存映像(同时加上调 ...

随机推荐

  1. SDWebImage实现原理--两张图带你看懂

    SDWebImage底层实现有沙盒缓存机制,主要由三块组成:1.内存图片缓存,2.内存操作缓存,3.磁盘沙盒缓存 SDWebImage GitHub地址 版本4.0.0 一.SDWebImage时序图 ...

  2. 利用Java自带的MD5加密

    package test.md5; import java.security.MessageDigest; public class MD5Util { public final static Str ...

  3. Jade之Interpolation

    Interpolation jade为不同的需求提供了一些特殊的操作符.详见Github = 将右边的值赋予左边,或者替换为右边变量的值. //- 赋值,js格式即可. - var title = & ...

  4. CSS3 线性渐变(linear-gradient) 兼容IE8,IE9

    一.线性渐变在 Mozilla 下的应用     语法: -moz-linear-gradient( [<point> || <angle>,]? <stop>, ...

  5. 4.“写程序” 这个活动大多数情况下是个人行为。 我们听说的优秀程序员似乎都是单打独斗地完成任务。同学们在大学里也认识一些参加ACM 比赛的编程牛人, 他们写的ACM 比赛的程序是软件么? “写程序” 和 ”做软件“ 有区别么? 请采访这些学生。

    ACM的题库的编程都只能算做程序,不能算软件.写程序和做软件区别还是很大的.程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合.为实现预期目的而进行操作的一系列语句和指令.而软件是程 ...

  6. H3C ipsec ike 协商配置

    1. 分几步设置 (1)定义ACL (2)创建 ipsec 安全建议 1.选择认证方式 ah 选择 ah头认证方式 不配置 ipsec不能建立成功 (3)创建IKE keychain 可以写多条key ...

  7. Visual Studio 2013 支持MVC3不完善,Razor智能提示不完整或者不提示

    以下只是针对MVC3. 前天试用Orchard 1.8,用VS2013新建C#类库项目(ClassLibrary project),然后新建Views文件夹,新建cshtml,然后引用MVC3的相关d ...

  8. Fire uva 11624

    题目连接:http://acm.hust.edu.cn/vjudge/problem/28833 /* 首先对整个图bfs一次得到火焰燃烧的时刻表 之后在bfs搜路径时加一个火烧表的判断 坑点在于:如 ...

  9. git 使用笔记

    git操作: git checkout 分支名称 // 切换分支git branch -a // 查看分支信息和当前分支 git pull // 将服务器所有代码下载到本地git merge orig ...

  10. 【WinHec启示录】透过Windows 10技术布局,谈微软王者归来

    每个时代都有王者,王者的成功,往往是因为恰逢其时地发布了一个成功的产品(具有里程碑意义,划时代的产品).Windows 95的成功标示着微软是PC时代的王者:WinXP的成功标示着微软是互联网时代的王 ...