core dump

4 篇文章 0 订阅

有的程序可以通过编译,但在运行时会出现segmentatin fault(即段错误)。这通常是指针错误引起的,但这不像编译错误一样可以在编译的时候定位到行,而是没有任何信息,使得调试程序变得困难。

这时我们可以通过gdb来调试,但如果程序很大的话,通过gdb一步步寻找显然不合适。因此,我们可以使用core dump。

要想让系统在信号中断造成的错误时产生core文件,我们需要系统中进行设置。首先需设置core大小为无限,ulimit -c unlimited。其次可通过echo "core" > /proc/sys/kernel/core_pattern 设置core文件生成的目录和文件名。此处我们设置为当前目录下,文件名为core。

之后我们使用如下c程序:


如图所示,编译运行后,就会提示已经生成了core dump文件。同时,在当前目录下,会生成一个名为core的文件。

之后,通过gdb的bt命令,就可看到程序在哪里发生了中断,如图所示(gdb调试core文件使用方式为 gdb 可执行文件 core文件):


从图中可看出,中断发生在main()函数中的printf()函数。当然,printf函数的底层还调用了vfprintf()函数。


另外,之前一直以为core是linux kernel的意思。最近才发现,core是另一种意思。

在使用半导体作为内存的材料前,人类是利用线圈当做内存的材料的,线圈叫做core,用线圈做的内存就叫做core memory。如今,半导体工业蓬勃发展,已经没有人用core memory了,不过,在许多情况下,人们还是把记忆体叫做core。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值