linux上的core文件,麻烦牛人们帮忙解释下是什么原因

linux上的core文件,麻烦牛人们帮忙解释下是什么原因,第1张

关于UNIX/Linux系统下面产生的core文件,根据我使用系统的经验,通常是由于自己在编写程序的过程中,由于自己的疏忽,使自己编写的程序产生了数组越界、或者是程序中的指针指向了一块无效的内存区域,产生的内存溢出错误。这一点在C语言编程过程中尤为明显,即:虽然定义了一个指针变量,但是未对该变量进行初始化、且判断该指针是否为空指针,而在后面的程序中又使用到了该变量,这时候肯定就会产生内存溢出错误。通常产生的提示信息就是:Segmentfault,CoreDumped!此时再一看自己当前工作的目录下面,就会自动产生出一个文件名为core的文件,通常该文件占得空间也是比较大的,至少好几兆字节。

1:看下系统日志是否有记录,如dmesg,/var/log/message文件2:将你的进程托管给系统的init进程,具体方法查下就知道3:写个监控脚本,监控进程是否存在,记录进程消失的时候的系统状态core有时候不一定会生成,如果是正常信号导致退出肯定不会有core

dump文件可以在程序crash时,方便我们查看程序crash的地方和上下文信息。在window下,要能生成dump文件,需要自己编写相应的代码。不过现在网上可以找到相应的代码,只要把它下载后然后加到自己的工程中去,就可以了!在linux下面就简单的许多。只要打开相应的开关,linux会自动在程序crash时生成相应的core文件。这个文件和window下的dump文件类似。

下面是简单的一些步骤:

1.查看当前是否已经打开了此开关

通过命令:ulimit -c 如果输出为 0

,则代表没有打开。如果为unlimited则已经打开了,就没必要在做打开。

2.通过命令打开

ulimit -c unlimited .然后通过步骤1,可以监测是否打开成功。

3.如果你要取消,很简单:ulimit -c 0 就可以了

通过上面的命令修改后,一般都只是对当前会话起作用,当你下次重新登录后,还是要重新输入上面的命令,所以很麻烦。我们可以把通过修改

/etc/profile文件 来使系统每次自动打开。步骤如下:

1.首先打开/etc/profile文件

一般都可以在文件中找到 这句语句:ulimit -S -c 0 /dev/null

2&1.ok,根据上面的例子,我们只要把那个0 改为

unlimited 就ok了。然后保存退出。

2.通过source /etc/profile 使当期设置生效。

3.通过ulimit -c 查看下是否已经打开。

其实不光这个命令可以加入到/etc/profile文件中,一些其他我们需要每次登录都生效的都可以加入到此文件中,因为登录时linux都会加载此文件。比如一些环境变量的设置。

还有一种方法可以通过修改/etc/security/limits.conf文件来设置,这个方法没有试过,也是网上看到。不过上面两种就可以了!

最后说一下生成core

dump文件的位置,默认位置与可执行程序在同一目录下,文件名是core.***,其中***是一个数字。core

dump文件名的模式保存在/proc/sys/kernel/core_pattern中,缺省值是core。通过以下命令可以更改core

dump文件的位置(如希望生成到/tmp/cores目录下)

echo “/tmp/cores/core”

/proc/sys/kernel/core_pattern

设置完以后我们可以做个测试,写个程序,产生一个异常。然后看到当前目录会有个core*的文件。然后我们可以

gdb core。* 程序 进行调试。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7587178.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-07
下一篇2023-04-07

发表评论

登录后才能评论

评论列表(0条)

    保存