• corefile的设置与使用


    一、简介

    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

    参考:

    http://blog.csdn.net/longxj04/article/details/7056853

    http://www.unixmen.com/how-to-enable-core-dumps-in-rhel6/

    三、corefile的使用

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

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

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

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

  • 相关阅读:
    SQL Reporting Services Report Viewer Scroll Bar(RDLC)
    SQL Server日期格式转换大全
    Export GridView to Excel within an UpdatePanel
    ASP.NET CompareValidator validate Currency
    微軟 Office 2003 版本比較一覽表
    打开Safari的Javascript调试功能
    SQL SERVER 2000/2005 列转行 行转列
    [Java] 使用cookie保持Session (Axis2 和 WSIT)
    .NET通用权限系统快速开发框架
    Java进阶对象与内存控制(一)
  • 原文地址:https://www.cnblogs.com/lit10050528/p/4811833.html
Copyright © 2020-2023  润新知