coredump

coredump介绍

    应用程序有时会因为异常或者bug导致在运行过程中异常退出或者终止,为了方便问题的定位,我们往往需要获取程序运行时的内存,寄存器状态,堆栈指针,内存管理以及函数调用堆栈信息等,从而找到bug所在。在linux系统中,我们通常可以通过对系统进行一些配置,将上述的信息输出到ELF文件中,即core文件。

coredump详细介绍

    core文件默认存储位置与对应的可执行程序位于同一路径下,文件名为core;具体信息可以通过如下命令查看:

   cat /proc/sys/kernel/core_pattern

   如果程序中调用了chdir函数,则core文件生成在chdir指定路径下。另外,我们也可以通过相关设置设定core文件生成路径。

   在类unix系统中,core文件本身的主要格式也是ELF格式,因此可以使用readelf或者file命令查看core文件的具体信息。

coredump基本配置

    调试coredump文件需要读取相应符号信息,因此,编译时需要加入-g选项。

    系统资源限制,默认情况下,core文件大小限制为0,不会生成core文件,需要进行设置。命令如下:

        ulimit –c unlimited  (coredump文件大小不受限制)

    进程资源限制,有时即使系统设置了unlimited,但是当前进程启动时如果没有读取到,则仍然不会生成core文件。进程限制内容查看命令:

        egrep “Units|core” /proc/<pid>/limits

    使core文件添加pid信息

        echo “1” > /proc/sys/kernel/core_user_pid

    配置core文件位置和文件名格式

         echo “./core.%p.%e”> /proc/sys/kernel/core_pattern

          生成的core文件与执行程序位于相同路径,文件名为core.pid.execute_name

          其他控制参数:

               %p - insert pid into filename 添加pid

               %u - insert current uid into filename 添加当前uid

               %g - insert current gid into filename 添加当前gid

               %s - insert signal that caused the coredump into the filename 添加导致产生core的信号

               %t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间

               %h - insert hostname where the coredump happened into filename 添加主机名

               %e - insert coredumping executable name into filename 添加命令名

    检查core目录,core文件生成路径所在磁盘空间是否为0,或者小于进程运行时所占的虚拟内存大小(通过top命令查看VIRT)

    检查core目录是否有写权限

    如果core文件没有core全,检查进程如下配置

        cat /proc/<pid>/coredump_filter

        00000003

        echo “0xF”> /proc/<pid>/coredump_filter

        原理如下:

             (bit 0) anonymous private memory

             (bit 1) anonymous shared memory

             (bit 2) file-backed privated memory

             (bit 3) file-backed shared memory

       如果发现core文件不知道属于哪个进程,执行如下命令:

            strings core.6440 | head

参考资料

详解coredump

时间: 2024-10-06 15:13:57

coredump的相关文章

《coredump问题原理探究》Linux x86版6.3节有成员变量的类coredump例子

在探究完类成员变量分布后,来定位一个coredump例子来实践一把: (gdb) bt #0 0x0804863c in xuzhina_dump_c06_s2_ex::print() () #1 0x08048713 in main () 看一下xuzhina_dump_c06_s2_ex::print的汇编: (gdb) disassemble 0x0804863c Dump of assembler code for function _ZN22xuzhina_dump_c06_s2_ex

Linux下产生coredump并压缩保存

设置coredump大小为'无限'ulimit -c unlimited 开启coredump记录进程号echo "1" > /proc/sys/kernel/core_uses_pid 指定coredump路径echo "/home/panchen/core-%e-%p-%t"> /proc/sys/kernel/core_pattern 压缩coredumpcat /usr/local/sbin/core_helper #! bin/shexec g

segv &amp; mini coredump

1. mini coredump a. segv http://zh.scribd.com/doc/3726406/Crash-N-Burn-Writing-Linux-application-fault-handlers https://github.com/gby/libcrash b. /proc/PID/coredump_filter http://stackoverflow.com/questions/8836459/minimal-core-dump-stack-trace-curr

《coredump问题原理探究》Linux x86版6.8节多继承coredump例子

下面看一个coredump的例子: (gdb) bt #0 0x08048662 in xuzhina_dump_c06_s5_ex_child::inheritFrom(char*, int) () #1 0x08048609 in main () 先看一下xuzhina_dump_c06_s5_ex_child::inheritFrom的汇编: (gdb) disassemble 0x08048662 Dump of assembler code for function _ZN28xuzh

coredump查原因

1. dmesg |tail -n 1 2. objdump -DCI ./a.out 示例: $ cat a.cpp #include <stdio.h> int main(){ int *pa=NULL; *pa=0; return 0;} $ g++ -g a.cpp $ ./a.out Segmentation fault $ dmesg | tail -n 1[49481461.465836] a.out[17960]: segfault at 0 ip 00000000004005

coredump简介与coredump原因总结

from:http://www.cnblogs.com/doctorqbw/archive/2011/12/21/2295962.html 千兵卫博士 coredump简介与coredump原因总结 什么是coredump? 通常情况下coredmp包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等.可以理解为把程序工作的当前状态存储成一个文件.许多程序和操作系统出错时会自动生成一个core文件. 如何使用coredump? coredump可以用在很多场合,使用Linux,或者sol

《coredump问题原理探究》Linux x86版7.4节List coredump例子

看一个coredump例子: 看一个coredump例子: Core was generated by `./xuzhina_dump_c07_s2_ex'. Program terminated with signal 11, Segmentation fault. #0 0x0285b9b7 in std::_List_node_base::hook(std::_List_node_base*) () from /usr/lib/libstdc++.so.6 Missing separate

《coredump问题原理探究》Linux x86版6.5节虚函数的coredump例子

在大型项目中,很容易出现版本不匹配的问题,其中导致的虚函数飘移的问题比较难解决. 在这里,用一个例子来说明如何解决这种问题. 建立三个源文件:testso.h,testso.cpp,xuzhina_dump_c6_s3_ex.cpp. testso.h的代码如下: 1 #ifndef __TESTSO_H__ 2 #define __TESTSO_H__ 3 4 class xuzhina_dump_c6_s3_ex 5 { 6 public: 7 virtual char* encode( c

如何分析coredump

一,什么是coredump 我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢?下面会分析)会产生一个叫做core的文件. 通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成第一个文件,许多的程序出错的时候都会产生一个core文件,通过工具分析这个文件,我们可

《coredump问题原理探究》Linux x86版7.6节 Map coredump例子

定位一个map相关的coredump来熟悉一下: Core was generated by `./xuzhina_dump_c07_s3_ex 5 / 6'. Program terminated with signal 11, Segmentation fault. #0 0x00000000 in ?? () Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.149.el6_6.4.i686 libgcc-4.