`

如何产生core dump或者core file.

 
阅读更多

当我的应用程序崩溃或出现段错误的时候,如何产生core文件?
解决方法:

在红帽企业版Linux上默认是不产生core文件。这个限制是在/etc/profile里面设置的:

ulimit -S -c 0 > /dev/null 2>1

有几种方法可以让系统产生core文件。第一个方法是修改/etc/profile里面的ulimit命令,如下:

ulimit -S -c unlimited > /dev/null 2>1

上面的设置允许系统上的所有用户产生没有文件大小限制的core文件。

如果只需要对部分用户或组开放产生core文件的权限,需要编辑/etc/security/limits.conf文件。例如,所有在"devel"组里面的用户可以产生core文件:


#<domain> <type> <item> <value>
@devel soft core <value>

<value>是core文件的最大块大小。 在/etc/security/limits.conf文件里面有配置参数的详细说明。提示,如果想通过limits.conf里面的设置来控制用户是否 可以产生core文件,需要把/etc/profile里面的ulimits设置注释掉:


# No core files by default
# ulimit -S -c 0 > /dev/null 2>1

如果应用是通过daemon命令来启动的,编辑/etc/init.d/functions,注释掉ulimit的设置或改变这行:

ulimit -S -c 0 >/dev/null 2>1

通过上面的设置,应用程序应该可以产生core文件。如果不能产生core文件,请检查您的应用程序是否拥有正确的uid,在程序执行的时候是否有 使用setuid改变程序的uid。 在红帽企业Linux 3上面, 可以通过下面的命令允许使用setuid的应用程序产生core文件:

echo 1 > /proc/sys/kernel/core_setuid_ok

另外,您也可以在应用程序中添加下面的代码来实现:

prctl(PR_SET_DUMPABLE, 1);

默认情况下,core文件会创建在应用程序的工作目录下。如果您想指定core文件存放的目录,您可以执行以下命令(用您要保存的路径替换/tmp):


 

echo "/tmp" > /proc/sys/kernel/core_pattern		


例子:

 

#include <stdio.h>

int main()

{

char *ptr="linuxers.cn";

*ptr=0;

}
 

编译运行后结果如下:

 

[leconte@localhost test]$ gcc -g -o test a.c

[leconte@localhost test]$ ./test
 

段错误

此时并没有产生core文件,接下来使用ulimit -c设置core文件大小为无限制,再执行./test程序,结果如下:

 

[leconte@localhost ~]$ ulimit -a

core file size (blocks, -c) 0

[leconte@localhost test]$ ulimit -c unlimited

[leconte@localhost test]$ ulimit -a

core file size (blocks, -c) unlimited

[leconte@localhost test]$ ./test

段错误 (core dumped)

[leconte@localhost test]$ ls -al core.*

-rw------- 1 leconte leconte 139264 01-06 22:31 core.2065

可见core文件已经生成,接下来可以用gdb分析,查看堆栈情况:

[leconte@localhost test]$ gdb ./test core.2065   

GNU gdb Fedora (6.8-27.el5)

Copyright (C) 2008 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law. Type "show copying"

and "show warranty" for details.

This GDB was configured as "i386-redhat-linux-gnu"...

warning: exec file is newer than core file.

warning: Can't read pathname for load map: Input/output error.

Reading symbols from /lib/libc.so.6...done.

Loaded symbols for /lib/libc.so.6

Reading symbols from /lib/ld-linux.so.2...done.

Loaded symbols for /lib/ld-linux.so.2

Core was generated by `./test'.

Program terminated with signal 11, Segmentation fault.

[New process 2065]

#0 0x0804836f in main () at a.c:6

6 *ptr=0;
 

  从上述输出可以清楚的看到,段错误出现在a.c的第6行,问题已经清晰地定位到了。

  很多系统默认的core文件大小都是0,我们可以通过在shell的启动脚本/etc/bashrc或者~/.bashrc等地方来加入 ulimit -c 命令来指定core文件大小,从而确保core文件能够生成。

  除此之外,还可以在/proc/sys/kernel/core_pattern里设置core文件的文件名模板,详情请看core的官方man手册


注意两点:
gcc -g -o test a.c
     gdb ./test core.2065

 

 

分享到:
评论

相关推荐

    Linux下怎么产生core dump文件及GDB怎么调试core.pptx

    ### Linux下产生Core Dump文件及使用GDB调试详解 #### 一、Core文件的基本概念与作用 当一个程序因为某些原因而崩溃时,系统内核会自动创建一个名为`core`的文件,这个文件包含了程序崩溃时刻的内存映像以及其他...

    window COREdump文件生成 c++代码

    - Windows可以通过注册表设置来全局启用Coredump,或者在程序启动时通过API调用来控制。 - 使用`SetErrorMode`函数可以改变进程的错误处理模式,使其在遇到未处理异常时生成Coredump。 3. **C++代码实现** - 在...

    linux coredump分析方法实例介绍

    该问题产生了一个 Core Dump 文件,我们将通过 GDB 调试器来分析该文件。 首先,我们使用 arm-fsl-linux-gnueabi-gdb 命令来分析 Core Dump 文件: ``` arm-fsl-linux-gnueabi-gdb -c core-tsk_mvm_Main-2533-11 `...

    Linux下生成core dump

    其中`&lt;corefile&gt;`是core dump文件的路径,`&lt;executable&gt;`是导致core dump的程序的可执行文件路径。 - **查看调用堆栈**:在`gdb`环境中,可以通过`where`或`bt`命令查看崩溃时的调用堆栈: ```sh (gdb) where `...

    javacore\heapdump文件分析工具

    2. 使用`jmap -dump:format=b,file=heapdump.hprof &lt;pid&gt;`命令生成`heapdump`文件,其中`&lt;pid&gt;`是Websphere应用服务器进程ID。 3. 运行`ha`工具,指定`heapdump.hprof`文件作为输入。 4. 分析`ha`工具生成的报告,...

    ubuntu-linux下程序崩溃生成coredump的方法.pdf

    - 修改 core dump 文件的生成路径:`echo '/home/wangtian/coredump_file/%t-%e-%p-%c.core' &gt; /proc/sys/kernel/core_pattern` 2. **永久更改**:编辑 `/etc/sysctl.conf` 文件,将更改写入配置文件中。 - 打开...

    GDB之在线调试与Coredump分析

    - /data/corefile/core-wpa_supplicant-1352:崩溃时的内存映像。 开发者需要根据Coredump文件和崩溃日志的信息,回溯程序执行的路径,找到引发崩溃的根源。 最后,GDB的使用需要一定的学习和练习。针对GDB的命令...

    coredump使用

    echo "/tmp/corefile-%e-%p-%t" &gt; /proc/sys/kernel/core_pattern ``` 这里 `%e` 表示可执行文件的名字,`%p` 是进程 ID,`%t` 是时间戳。 3. **使用 PID 作为文件名的一部分**:通过修改 `/proc/sys/kernel/...

    linux core dump

    可以通过以下命令修改此文件:`echo "/corefile/core-%e-%p-%t" &gt; core_pattern`,将 Core 文件统一生成到 `/corefile` 目录下,产生的文件名为 `core-命令名-pid-时间戳`。其中 `%p` 代表进程 id,`%u` 代表当前 ...

    Linux应用程序调试之debug_coredump

    何时产生core dump? 当进程接收到某些信号(如SIGSEGV)时,如果内核被配置为允许生成core dump,那么它就会创建一个包含进程内存映像的文件。除了SIGSEGV外,其他信号也可能触发core dump的生成,例如: - ...

    coredump_article

    【核心 dump 文件(Core Dump File)详解】 在 IT 领域,当一个程序异常终止时,操作系统可能会生成一种特殊类型的文件,称为“核心 dump”或“core dump”文件。这个文件记录了程序崩溃时内存中的状态,包括进程的...

    如何使用coredump

    `/proc/sys/kernel/core_pattern`可以用来设置core文件的保存路径和命名规则,例如`echo "/corefile/core-%e-%p-%t" &gt; core_pattern`会让core文件保存到`/corefile`目录下,并以`core-命令名-pid-时间戳`的形式命名...

    jca-分析javacore和dump.zip

    1. **运行JCA工具**:通常使用命令行运行,如`java -jar jca457.jar [javacore_file] [heap_dump_file]`。 2. **输入参数**:提供javacore和heap dump的文件路径。 3. **生成报告**:工具会生成详细的分析报告,包括...

    core file 机制.pdf

    如果core_pattern的首字符是管道符'|',则内核将coredump的内容发送给对应的程序处理,而不是写入文件。 4. 使用chdir函数的影响:如果程序在执行过程中使用了chdir函数更改了工作目录,core文件可能会被保存在新的...

    Unix环境下core dump 分析

    首先,确保core dump文件和导致其生成的可执行文件在同一目录下,或者知道core dump文件的完整路径。然后,可以使用GDB的`file`命令加载可执行文件,`core`命令加载core dump文件,如`gdb program_name core`。加载...

    gdb调试详解 讲述如何使用gdb调试以及调试core dump

    要生成Core Dump文件,需要在程序崩溃后执行`ulimit –c unlimited`命令,设置Core Dump文件的大小。同时,需要在编译程序时添加`-g`选项,并把优化选项等级设为最低(-O0,默认为-O2)。 通过GDB和Core Dump文件,...

    利用wsadmin生成javacore,heapdump文件

    在IT领域,尤其是在Java应用程序的性能调优过程中,生成javacore和heapdump文件是非常重要的步骤。这些文件能帮助我们诊断应用程序的内存泄漏、性能瓶颈等问题。本篇将详细讲解如何利用wsadmin工具来生成这两种文件...

    Linuxcore文件介绍.pdf

    例如,设置模式为/corefile/core-%e-%p-%t,将使得Core Dump文件按照程序名(%e)、进程ID(%p)和UNIX时间戳(%t)命名。 Core Dump的使用示例 当需要分析Core Dump文件时,可以使用gdb等调试工具。例如,gdb --...

    Linux下core文件调试方法.pdf

    例如,使用 `echo "/corefile/core-%e-%p-%t" &gt; core_pattern` 命令可以将生成的 Core 文件保存到 /corefile 目录下,并将文件名设置为 core-命令名-pid-时间戳。 4. 使用 Core 文件 可以使用 GDB 调试器来调试 ...

    浅析Linux下利用coredump技术追查进程崩溃原因

    然而,我们可以自定义coredump文件的生成位置和命名规则,例如通过修改`/proc/sys/kernel/core_pattern`中的设置,比如`echo “/home/corefile/core-%e-%p-%t” &gt; /proc/sys/kernel/core_pattern`。这里的`%e`代表可...

Global site tag (gtag.js) - Google Analytics