core dump

core dump

基本概念

当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这个行为叫做core dump。实际上,除了内存信息之外,还有些关键的程序运行状态也会同时dump下来,例如寄存器信息,内存管理信息,其他处理器和操作系统状态信息等等。

基本操作

  • 终端中输入命令ulimit -c,输出结果为0,默认是关闭core dump的,即当程序异常终止时,也不会生成core dump文件。
kkk@kkk-VirtualBox:~/桌面$ ulimit -c
0
  • 使用命令ulimit -c unlimited来开启core dump功能,并且不限制core dump文件的大小;如果需要限制文件的大小,将unlimited改成你想生成core文件最大的大小。
  • 上面的命令只会对当前的终端环境有效,如果想需要永久生效。可以修改文件/etc/security/limits.conf文件。
kkk@kkk-VirtualBox:~/桌面$ sudo gedit /etc/security/limits.conf
#        - rtprio - max realtime priority
#        - chroot - change root to directory (Debian-specific)
#
#<domain>      <type>  <item>         <value>
    *           soft    core           unlimited
  • 修改core文件保存的路径
    • 默认生成的core文件保存在可执行文件所在的目录下,文件名为core
    • 通过修改/proc/sys/kernel/core_uses_pid文件可以让生成core文件名是否自动加上pid号。
      • 例如echo 1 > /proc/sys/kernel/core_uses_pid,生成的core文件名见会变成core.pid,其中pid表示该进程的PID。
    • 还可以通过修改/proc/sys/kernel/core_pattern来控制生成core文件保存的位置以及文件名格式。
      • 例如可以用echo "/tmp/corefile-%e-%p-%t" > /proc/sys/kernel/core_pattern设置生成的core文件保存在/tmp/corefile目录下

使用gdb调试Core文件

  • 首先,使用gcc编译源文件,加上-g以增加调试信息;
  • 按照上面打开core dump使程序异常终止时能生成core文件;
  • 运行程序,使用命令gdb program core来查看core文件,其中program为可执行程序名,core为生成的core文件名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值