用GDB调试程序--core dump文件生成和制作(菜鸟级)

一,Core dump文件简介


导致进程产生core dump的信号,请参考 “用GDB调试程序--调试器GDB常用功能(菜鸟级) ”:

http://blog.csdn.net/IterZebra/archive/2011/02/22/6198875.aspx 的二,c)。

设置core dump文件生成的目录:

echo mycore-%e > /proc/sys/kernel/core_pattern

echo "/tmp/cores/core-%e " > /proc/sys/kernel/core_pattern

core dump文件生成开关和大小设定:

ulimit -c limit 其中ulimit是用于获取和设定SHELL和其中启动的进程的相关资源的系统命令,

-c表示设置core文件信息,limit是以k为单位的core文件的大小,unlimited则表示无限大。

以RHEL5为例,core开关系统默认设定方法:

守护进程 配置文件 :/etc/init.d/functions文件中的配置语句

corelimit="ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0}“

SHELL配置 配置文件 : /etc/profile

文件中的配置语句 ulimit -S -c 0>/dev/null 2>&1

<!-- [if !mso]> <mce:style><!-- v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} --> <!-- [endif]--><!-- [if !ppt]--><!-- [endif]-->

proc/sys/kernel/core_pattern文件(Linux 2.4以前不存在此文件)中定义了CORE DUMP文件的名

(默认为”core”),其中可以使用以下关键字:

<!-- [if !mso]> <mce:style><!-- v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} --> <!-- [endif]--><!-- [if !ppt]--><!-- [endif]-->

%% 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

<!-- [if !mso]> <mce:style><!-- v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} --> <!-- [endif]--><!-- [if !ppt]--><!-- [endif]--> /proc/sys/kernel/core_pattern中未定义%p时,

/proc/sys/kernel/core_uses_pid文件中定义是否在CORE DUMP文件名后追加进程ID “.PID”

<!-- [if !mso]> <mce:style><!-- v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} --> <!-- [endif]--><!-- [if !ppt]--><!-- [endif]-->

echo 1 > /proc/sys/kernel/core_uses_pid 使得 core文件名后包含 .PID
echo 0 > /proc/sys/kernel/core_uses_pid 使得core文件名后不包含 .PID

<!-- [if !mso]> <mce:style><!-- v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} --> <!-- [endif]--><!-- [if !ppt]--><!-- [endif]--> sysctl 命令也可以对以上配置进行设定 请参考 man sysctl

suse Linux下配置core dump文件的目录:

编辑 vim /etc/sysctl.conf

#Set core dump directroy
kernel.core_pattern = /var/opt/nec/pfc/core/%e-%p.core



二,用GDB制作core dump文件


<!-- [if !mso]> <mce:style><!-- v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} --> <!-- [endif]--><!-- [if !ppt]--><!-- [endif]--> 实际开发中经常遇到程序(特别是后台程序)不响应外界的操作,好像阻塞在某处的现象,

此种情况下也可以取得c ore文件进行分析。

如下,对PID进程,使用gcore产生core dump名字为corefilename,然后保存。


<!-- [if !mso]> <mce:style><!-- v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} --> <!-- [endif]--><!-- [if !ppt]--><!-- [endif]-->

gdb -p PID (对进程PID进行调试)
(gdb) gcore corefilename
Saved corefile corefilename
<!-- [if !mso]> <mce:style><!-- v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} --> <!-- [endif]--><!-- [if !ppt]--><!-- [endif]-->

另:
gdb 衍生命令 /usr/bin/gcore
<!-- [if !mso]> <mce:style><!-- v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} --> <!-- [endif]--><!-- [if !ppt]--><!-- [endif]--> usage: gcore [-o filename] pid

<!-- [if !mso]> <mce:style><!-- v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} --> <!-- [endif]--><!-- [if !ppt]--><!-- [endif]-->

1. GDB 中使用backtrace命令
<!-- [if !mso]> <mce:style><!-- v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} -->

三,本文结束语

设置core dump以便调试,在进程不响应的时候制作core文件以便分析,是调试中常用的技术。

希望本文对您有所帮助。

<!-- [endif]--><!-- [if !ppt]--><!-- [endif]-->

1. GD中使用backtrace命令

<!-- [if !mso]> <mce:style><!-- v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} --> <!-- [endif]--><!-- [if !ppt]--><!-- [endif]-->

<!-- [if !mso]> <mce:style><!-- v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} --> <!-- [endif]--><!-- [if !ppt]--><!-- [endif]-->
GDB 中使用backtrace命令
GDB 中使用backtrace

<!-- [if !mso]> <mce:style><!-- v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} --> <!-- [endif]--><!-- [if !ppt]--><!-- [endif]-->

你可能感兴趣的:(C++,c,linux,vim,SuSE)