博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
corefile的设置与使用
阅读量:6935 次
发布时间:2019-06-27

本文共 1220 字,大约阅读时间需要 4 分钟。

一、简介

corefile是Linux下程序崩溃时生成的文件,可以用来分析程序崩溃的原因,因为它内部包含了程序崩溃时的堆栈信息。

二、corefile的设置

默认情况下,程序崩溃是不会生成corefile了,因为被操作系统限制。可以通过命令: ulimit -c 来查看,如果值为0则表示被限制了。

打开的方式有多种,最简单的是: ulimit -c unlimited 其中unlimited表示corefile文件的大小无限制,默认为0,所以不能生成corefile文件,你也可以指定其他的值。

这种设置方式虽然简单,但它却只是跟shell相关的,也就是说,如果我们关闭了当前shell再打开一个,则刚才的设置就失效了,这是很不方便的。

另外一种方式时修改文件:/etc/security/limits.conf。将其中的这一行 #* soft core 0 取消注释并将最后的0修改为unlimited或者你希望的值。

这个修改重新登录的时候才会生效,当然也有使其立即生效的方法:将ulimit -c unlimited 放入/etc/profile中,然后执行source /etc/profile即可立即生效。

默认corefile是生成在程序的执行目录下或者程序启动调用了chdir之后的目录,那么我们可以通过设置生成corefile的格式来控制它,让其生成在固定的目录下。

在/proc/sys/kernel/core_pattern文件中的内容控制着它的格式。但是这里的设置在重启后会失效,如果想要长期生效,那么久需要修改文件:/etc/sysctl.conf,在其中添加一行:kernel.core_pattern=/home/robin/corefile/%e-%p,这个格式表示将corefile放在/home/robin/corefile目录下,每个corefile的格式为:程序名+进程id。当然修改文件/etc/sysctl.conf是不能立即生效的,如果想要立即生效:sysctl -p /etc/sysctl.conf,即可。

关于格式的的控制有如下几个参数:

%%:相当于%

%p:相当于<pid>

%u:相当于<uid>

%g:相当于<gid>

%s:相当于导致dump的信号的数字

%t:相当于dump的时间

%e:相当于执行文件的名称

%h:相当于hostname

参考:

三、corefile的使用

我们费了这么大的力气生成了这个corefile当然不是为了只是看看而已,我们需要从它里面的内容分析出程序崩溃的原因。

这就需要使用到我们的另一个工具:objdump、gdb。

objcopy –only-keep-debug execname debug.symbolgdb --symbols=debug.symbol –core=corefile(gdb)bt

这样就能看到程序崩溃时的堆栈了。

转载地址:http://wfwnl.baihongyu.com/

你可能感兴趣的文章
Android面试知识点(转)
查看>>
Struck: Structured Output Tracking with Kernels
查看>>
delphi调用外部程序并等待其运行结束
查看>>
BZOJ 1426 收集邮票 ——概率DP
查看>>
【转】BT5汉化步骤
查看>>
老版本select2设置初始值
查看>>
TessorFlow学习 之 序言
查看>>
代码荣辱观-以运用风格为荣,以随意编码为耻
查看>>
Java基础概念(一)
查看>>
iOS 排序算法总结、二分法查找
查看>>
oracle查询语句注意事项:
查看>>
第166天:canvas绘制饼状图动画
查看>>
Reporting service个人使用经验
查看>>
数学2.Latex扫盲
查看>>
去除Coding4Fun中MessagePrompt的边框(Border)
查看>>
参数文件
查看>>
各指数的历史-市盈率平均估值
查看>>
也说_T、_TEXT、TEXT、L
查看>>
swiftsuspenders Memo
查看>>
生成动态验证码的jsp
查看>>