core dump的认识和使用指南

1.什么是core dump?

  • 问题:
    程序运行时出现段错误
    一般由指针错误引起,但是却不会提示文件的某一行,使我们调试很困难。

  • gdb的一种尝试:
    step一步一步找。一万行的代码,呵呵

  • core方案
    让系统在信号中断造成错误的时候产生core文件 ——

$ ulimit -c unlimited

当运行时信号引起错误时发生core dump;
发生core dump后,用gdb进行查看core文件的内容,就可以定位文件中引发core dump的行了 ——

$ # gdb [exec file] [core file]
$ gdb ./test test.core

进入gdb后,可以用bt来检查程序运行到哪里。

  • 这里的core是记忆体的意思,之前的内存就是core(线圈)来制作的。

  • 关于core dump的意义:
    操作系统将程序挂掉时的内存内容dump(抛)出来,写在core的文件中,方便我们gdb定位,这个动作就是core dump。

2.如何使用core dump?

  • core dump的文件命名规则:
    /proc/sys/kernel/core_uses_pid可以控制产生的core文件名中是否添加pid作为拓展,如果添加则文件内容为1。
    这个目录下的另外两个含有core的文件:core_pattern、core_pipe_limit
    core_pattern可以控制文件保存的位置和文件名格式
$ cat /proc/sys/kernel/core_pattern
$ core
$ echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

系统对core文件的命名均为core,存储路径在进程的当前目录下
设置的core文件命名规则为"core-命令名-pid-时间戳",存储路径为/corefile文件夹下
一些用到的参数列表含义:
%p pid
%u uid
%g gid
%s 到时core文件产生的信号
%t core文件生成时的unix时间
%h 主机名
%e 命令名

  • 利用gdb+core恢复当掉的现场
$ gdb -c core.pid program_name
... # 使用where就可以指出哪一行被down掉,哪个函数内,由谁调用等等
(gdb) where/bt
  • 关于core文件的设置:
    这个是用户资源限制命令
$ ulimit [-acdfHlmnpsStvw] [size]

ulimit (bash build-in command)
-a 显示所有设置
-c core 文件的最大大小
-s 栈的大小
还有一些现在还没有用到

-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes

  • 查看core文件输出在哪里
    存放core dump的目录是进程当前目录,
    一般就是当初发出命令启动进程时所在的目录。
    但如果是通过脚本启动,则脚本可能会修改当前目录,这时可以查看/proc/<进程pid>/cwd符号链接的目标来确定进程真正的当前目录。
    系统生成的core文件不带其他任何拓展名称,全部为core。新的文件会覆盖原来的文件。

希望关于core dump的一些总结能帮到你。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值