在程序不寻常退出时,内核会在当前工作目录下生成一个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. CentOS7搭建NAS,包括NFS、ISCSI

    第一步:安装 更新系统 yum update 安装iftop yum install epel-release yum install iftop 安装NFS yum install nfs-util ...

  2. mormot json操作

    使用JSon只需要引用一个文件synCommons. procedure TForm1.Button1Click(Sender: TObject);var jo: Variant; i: Int64; ...

  3. 阿里巴巴Json工具-Fastjson讲解

    Fastjson是阿里巴巴公司开源的速度最快的Json和对象转换工具,一个Java语言编写的JSON处理器. 1.遵循http://json.org标准,为其官方网站收录的参考实现之一.2.功能qia ...

  4. ue4 SNew补遗

    上一篇分析了SNew背后的实现,但是有一个关键问题遗漏了,那就是: #define SNew( WidgetType, ... ) \ MakeTDecl<WidgetType>( #Wi ...

  5. aix 6+ mount 光驱

    AIX 挂载光驱的方法 系统环境: [root@Big A:/1]#oslevel -s6100-06-00-0000 [root@Big A:/]#crfs -v cdrfs -p ro -d '/ ...

  6. JDBC常用接口详解

    JDBC中常用接口详解 ***DriverManager 第一.注册驱动 第一种方式:DriverManager.registerDriver(new com.mysql.jdbc.Driver()) ...

  7. (Python)集合、集合的函数

    本节我们将学习python的另一种数据类型:集合(set) 1.集合(set) 集合在Python中是一种没有重复元素,且无序的数据类型,且不能通过索引来引用集合中的元素 >>> b ...

  8. UWP深入学习五: 传感器与搜索、共享及链接

    Responding to motion and orientation sensors: Quickstart: Responding to user movement with the accel ...

  9. jquery checkbox选中、改变状态、change和click事件

    jquery判断checked的三种方法:.attr('checked); //看版本1.6+返回:”checked”或”undefined” ;1.5-返回:true或false.prop('che ...

  10. 【4_237】Delete Node in a Linked List

    Delete Node in a Linked List Total Accepted: 48121 Total Submissions: 109297 Difficulty: Easy Write ...