在程序不寻常退出时,内核会在当前工作目录下生成一个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. linux中压缩与解压缩命令

    .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ——————————————— .gz 解压 ...

  2. GATK使用说明-GRCh38(Genome Reference Consortium)(二)

    Reference Genome Components 1. GRCh38 is special because it has alternate contigs that represent pop ...

  3. linux增加用户并赋予权限/用户和用户组操作命令

    ===============ubuntu================================================== 在Ubuntu13.10下创建一个新的用户:Step1: ...

  4. PoEdu - C++阶段班【Po学校】- 第1课

    1 C++开讲 C ++  伟大的编程语言:能提高程序运行效率,节约更多的资源,"正确的使用C++,能够抑制全球变暖问题". 2 C++能力雷达图 通过 1效率 2灵活度 3 抽象 ...

  5. live555 直播arm-linux视频

    live555例程testOnDemandRTSPServer.cpp启动一个流服务器 首先启动使用环境, TaskScheduler* scheduler = BasicTaskScheduler: ...

  6. Azure IOT (EventHub + Stream Analytics + Table Storage)的使用

    最近研究利用Azure的 Event hub ,Stream Analytics和TableStorage来实现IOT的一个方案, 利用Event hub来采集传感器设备数据值,然后输入到Stream ...

  7. Jfinal 使用 JsonKit 转换不了问题

    使用bootStrap+jfinal开发一个管理系统,遇到了前台ajax获取数据,使用了jfinal的Jsonkit,将一个继承了model的vo进行转换,却一直没有将vo的属性值转换为json格式, ...

  8. ycsb使用方法

    ycsb本身相当于客户端,不断向服务端发送请求,同时记录下这些请求耗费的时间. 那么,必须要有一个服务端在某个端口监听. ycsb可以在workload里写入服务端的ip和端口,也可以在命令行里写上. ...

  9. Python 1 —— Start Up

    作为一种脚本语言,Python号称是万能的胶带语言,可以非常好的作为多种语言之间的粘合剂,因此从多种语言融合的角度看,学习Python是非常有必要的!下面对学习Python当中的一些重点进行记录! 一 ...

  10. (最长公共子序列+推导)Love Calculator (lightOJ 1013)

    http://www.lightoj.com/volume_showproblem.php?problem=1013   Yes, you are developing a 'Love calcula ...