代码查错方法之gdb生成core文件

core文件的生成和路径设置

在程序崩溃时,内核会生成一个core文件,即程序最后崩溃时的内存映像,和程序调试信息。之后可以通过gdb,打开core文件察看程序崩溃时的堆栈信息,可以找出程序出错的代码所在文件和函数。

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

1)使用 ulimit -a 命令,可以察看core文件的生成开关和大小限制所有信息(输出内容中 core file size,若为0表示不生成core文件)  

2)使用 ulimit -c 命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。  

3)使用 ulimit -c filesize 命令,可以限制core文件的大小(filesize的单位为kbyte)。    

如:ulimit -c 2048.
注意:若用 ulimit -c unlimited (本地调试推荐用该命令),则表示core文件的大小不受限制。

2.core文件的名称和生成路径

若未设置过core文件生成路径和名称,默认生成在可执行文件运行命令的同一路径下,命名为core。新的core文件生成将覆盖原来的core文件。

通过编辑 proc/sys/kernel/core_pattern,设置文件路径和文件名,可用如下命令:

    echo "/corefile/core-%e-%p-%t" > core_pattern

   所产生的 core 文件会存放到 /corefile 目录下,产生的文件名为 core- 命令名 -pid- 时间戳

  文件名参数列表说明:

      %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 时间

      %h - insert hostname where the coredump happened into filename 添加主机名

      %e - insert coredumping executable name into filename 添加命令名

示例一:在指定路径下生成core文件(ubuntu14.04)

  • 在/etc/sysctl.conf文件结尾加上
kernel.core_pattern=/路径/core-%e-%p-%t

然后执行生效:
sudo sysctl -p /etc/sysctl.conf
  • 查看是否生效

在这里插入图片描述

  • 在设置生成core文件的路径下为core文件指定空间:
ulimit -c unlimited

示例二:在指定路径下生成core文件(Xshell)

  • 在/proc/sys/kernel/core_pattern文件中写入
echo "/生成core文件的路径/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
如:
echo "/home/General/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
  • 在生成core文件的路径下执行
ulimit -c 数字		//表示core文件最大占“数字”字节的空间
或
ulimit -c unlimited	//core文件大小无限制
  • 发生段错误后的效果
    在这里插入图片描述
    注意:如果按照此方法无法生成core文件,可能是内核不支持
可生成段错误的代码
#include <stdio.h>   
int func( int *p)
{          
	*p = 0; 
}
int main()
{          
	func(NULL);          
	return 0; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈海平20220310

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值