Linux下如何生成core dump文件
2012-11-19 21:34
246 查看
使用C/C++语言开发程序时,当程序crash的时候产生core dump文件对于调试程序是很有帮助的。在Redhat Linux系统中默认是不生成core
dump文件的,这是因为在/etc/profile文件中有这样一行
ulimit -S -c 0 > /dev/null 2>&1
如何打开core dump呢?最简单的方法是用户在自己的~/.bash_profile中加入ulimit -S -c unlimited > /dev/null 2>&1,这样设置后允许当前用户生成没有大小限制的core dump文件。此外还有两种系统级修改生成core dump的方法。
第一种方法是修改/etc/profile,把ulimit那一行改为
ulimit -S -c unlimited > /dev/null 2>&1
这样设置后系统允许所有用户生成没有大小限制的core dump文件。这样做的优点是不需要重起系统,缺点是无法控制只让某些用户生成core dump文件。
第二种方法是修改/etc/security/limits.conf文件。很多系统上限都可以通过修改这个文件改变,如最大子进程个数,最大打开文件数等等。这个文件有详细的注释,对如何修改这个文件做了说明。如果想对所有用户打开core dump,可以加入一行
* soft core 0
如果只想对某些用户或用户组打开core dump,可以加入
user soft core 0或@group soft core 0
注意如果通过修改/etc/security/limits.conf文件打开core dump,还需要注释掉/etc/profile中的ulmit那一行
#ulimit -S -c 0 > /dev/null 2>&1
这样修改的优点是可以针对特定用户或特定组打开core dump文件,缺点是需要重起系统。
最后说一下生成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_pattern的配置可以更复杂一些:
继续搜索,搜到一篇好文,粘贴如下:
1:怎么样使程序死掉时自动产生core文件:
使用ulimit -c unlimited 取消内核对core文件的限制。
2:修改默认产生core文件的名称:
默 认的core文件名称是这个:core[.$pid], 由/proc/sys/kernel/core_pattern指定,2.4以后的内核为了与2.4的内核相互兼容,当/proc/sys/kernel /core_uses_pid值为非0时,会自动加上。$pid这个字段,为0时,单独一个core.
通过以下方法可以指定系统产生core文件的名称:
%% A single % character
%p PID of dumped process
%u real UID of dumped process
%g real GID of dumped process
%s number of signal causing dump
%t time of dump (seconds since 0:00h, 1 Jan 1970)
%h hostname (same as ‘nodename’ returned by uname(2))
%e executable filename
例如:
输入以下命令:echo ‘core_%h_%e_%s_%t’ > /proc/sys/kernel/core_pattern ,产生的coredump文件的名称就是形如core_localhost_a.out_6_1229576912.14468
这条命令似乎对gcore不起作用, 不知道是不是自己系统的问题。
3:程序运行时, 手动产生coredump文件
有如下几种方法:
a)。通过gcore $pid命令直接导出相应进程的core文件,此命令运行后, 会恢复程序的执行, 不影响程序的运行
b)。通过另一个进程发送SIGABRT信号给当前进程, 虽然也能产生core文件,但是程序随着一起终止掉了!
c)。还有其它一些信号也会产生同样的效果,暂时还没时间验证
4:利用core文件,调试程序
gdb -c core文件 程序
转自:http://linux.chinaitlab.com/kernel/872473.html
dump文件的,这是因为在/etc/profile文件中有这样一行
ulimit -S -c 0 > /dev/null 2>&1
如何打开core dump呢?最简单的方法是用户在自己的~/.bash_profile中加入ulimit -S -c unlimited > /dev/null 2>&1,这样设置后允许当前用户生成没有大小限制的core dump文件。此外还有两种系统级修改生成core dump的方法。
第一种方法是修改/etc/profile,把ulimit那一行改为
ulimit -S -c unlimited > /dev/null 2>&1
这样设置后系统允许所有用户生成没有大小限制的core dump文件。这样做的优点是不需要重起系统,缺点是无法控制只让某些用户生成core dump文件。
第二种方法是修改/etc/security/limits.conf文件。很多系统上限都可以通过修改这个文件改变,如最大子进程个数,最大打开文件数等等。这个文件有详细的注释,对如何修改这个文件做了说明。如果想对所有用户打开core dump,可以加入一行
* soft core 0
如果只想对某些用户或用户组打开core dump,可以加入
user soft core 0或@group soft core 0
注意如果通过修改/etc/security/limits.conf文件打开core dump,还需要注释掉/etc/profile中的ulmit那一行
#ulimit -S -c 0 > /dev/null 2>&1
这样修改的优点是可以针对特定用户或特定组打开core dump文件,缺点是需要重起系统。
最后说一下生成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_pattern的配置可以更复杂一些:
继续搜索,搜到一篇好文,粘贴如下:
1:怎么样使程序死掉时自动产生core文件:
使用ulimit -c unlimited 取消内核对core文件的限制。
2:修改默认产生core文件的名称:
默 认的core文件名称是这个:core[.$pid], 由/proc/sys/kernel/core_pattern指定,2.4以后的内核为了与2.4的内核相互兼容,当/proc/sys/kernel /core_uses_pid值为非0时,会自动加上。$pid这个字段,为0时,单独一个core.
通过以下方法可以指定系统产生core文件的名称:
%% A single % character
%p PID of dumped process
%u real UID of dumped process
%g real GID of dumped process
%s number of signal causing dump
%t time of dump (seconds since 0:00h, 1 Jan 1970)
%h hostname (same as ‘nodename’ returned by uname(2))
%e executable filename
例如:
输入以下命令:echo ‘core_%h_%e_%s_%t’ > /proc/sys/kernel/core_pattern ,产生的coredump文件的名称就是形如core_localhost_a.out_6_1229576912.14468
这条命令似乎对gcore不起作用, 不知道是不是自己系统的问题。
3:程序运行时, 手动产生coredump文件
有如下几种方法:
a)。通过gcore $pid命令直接导出相应进程的core文件,此命令运行后, 会恢复程序的执行, 不影响程序的运行
b)。通过另一个进程发送SIGABRT信号给当前进程, 虽然也能产生core文件,但是程序随着一起终止掉了!
c)。还有其它一些信号也会产生同样的效果,暂时还没时间验证
4:利用core文件,调试程序
gdb -c core文件 程序
转自:http://linux.chinaitlab.com/kernel/872473.html
相关文章推荐
- Linux下如何生成core dump 文件
- 如何查询和修改Linux操作系统生成core dump文件的默认路径?
- Linux下如何生成core dump文件
- Linux下如何生成core dump文件
- 如何查询和修改Linux操作系统生成core dump文件的默认路径
- 如何查询和修改Linux操作系统生成core dump文件的默认路径
- Linux下如何生成core dump 文件(解决segment fault段错误的问题)
- Linux下如何生成core dump文件
- Linux下如何生成core dump文件
- Linux下如何生成core dump文件
- linux 下如何打开core dump文件开关
- 如何在linux下快速生成当前目录下所有文件夹下所有文件的MD5
- linux下生成core dump文件方法及设置
- linux下生成core dump文件方法及设置
- Linux如何查找某个时间点后生成的空文件
- Linux下静态库_库的基本概念;如何生成静态库动态库;nm查看库中包含那些函数、ar生成静态库,查看库中包含那些.o文件、ldd查看程序依赖的.so文件;gcc/g++与库相关的参数-L,-l,-f
- linux下生成core dump文件方法及设置
- 在linux平台下,设置core dump文件生成的方法
- [ARM-Linux开发] 嵌入式 linux如何生成ko文件
- linux中如何使用javah命令生成jni头文件