`

用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]-->

分享到:
评论

相关推荐

    GDB之在线调试与Coredump分析

    在线调试是在程序运行的过程中进行调试,而Coredump分析是在程序异常退出后,通过分析Coredump文件了解程序崩溃时的状态,以确定崩溃的原因。 在线调试是开发者在程序运行时进行调试的过程,可以实时查看程序的运行...

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

    通过GDB,可以轻松地调试程序,检查程序崩溃后的核心转储文件(Core Dump),从而帮助开发者快速定位和解决问题。 GDB基础命令 在使用GDB之前,需要了解一些基本命令。这些命令可以帮助开发者快速启动GDB,设置...

    coredump文件的生成与解析.docx

    本文将详细介绍 coredump 文件的生成和解析过程,涵盖了 coredump 文件生成环境的设置、交叉编译执行文件、coredump 文件的生成、PC 端的 arm-gdb 解析等方面。 一、coredump 文件生成环境的设置 在 Linux 操作...

    GDB调试--以汇编语言为例

    为了调试汇编语言程序,需要使用-gstabs参数重新编译代码,以便生成可调试的可执行文件。 ``` as -gstabs -o cpuid.o cpuid.s ld -o cpuid cpuid.o ``` 然后,可以使用GDB调试器来调试程序: ``` gdb cpuid ``` ...

    用GDB调试程序 - Ubuntu中文1

    - `core &lt;file&gt;`:使用core dump文件进行调试。 - `attach &lt;PID&gt;`:与已运行的进程ID关联,开始调试。 5. **控制程序执行**: - `break &lt;location&gt;`:在特定位置(如函数名或行号)设置断点。 - `watch ...

    coredump文件调试

    Core Dump 文件调试 Core Dump 文件调试是指使用 ...Core Dump 文件调试是指使用 GDB 调试 Core Dump 文件的过程,是一个非常有用的调试技术,可以帮助开发者快速定位问题所在的位置,提高开发效率和减少 Debug 时间。

    Linux下生成core dump

    通过以上步骤,我们可以有效地在Linux环境下生成和分析core dump文件,这对于调试程序崩溃的原因具有重要的作用。特别是对于开发人员来说,合理配置core dump文件的生成规则,能够大大提升故障排查的效率,从而更快...

    用GDB调试程序--对GDB介绍的比较详细。

    例如,对于给出的`tst.c`源代码示例,我们首先使用`cc -g`编译生成包含调试信息的可执行文件`tst`。然后,启动GDB并加载`tst`,通过`list`或简写`l`命令查看源代码。接着,可以设置断点,如在第16行和`func`函数入口...

    用GDB调试程序(整理有书签).pdf

    陈浩的《用GDB调试程序》和守望的个人博客的《GDB调试指南》这两份资料,提供了丰富的实践案例和详细的操作步骤,帮助读者从基础到进阶掌握GDB的使用技巧。通过阅读这些教程,你可以了解如何有效地使用GDB解决实际...

    Linux Insight配置GDB调试U-BOOT.doc

    调试Bootloader(如U-BOOT)和内核时,通常需要一个运行在主机上的GDB服务程序,它通过以太网或串口与目标CPU连接,并可能提供Telnet接口以便进行目标CPU的初始化和程序下载。这种架构使得调试过程更为复杂,但也是...

    mingw-get-setup.exe以及gdb-7.6.1-1-mingw32-bin.tar

    MingW和GDB是开发Windows平台上C/C++程序的重要工具,它们在软件开发中的作用不可忽视。MingW(Minimalist GNU for Windows)是一个将GNU工具集移植到Windows上的项目,使得开发者可以在Windows环境下使用GNU编译器...

    QT程序调试器——qtcreator-gdb-7.4-MINGW32_NT-6.1-i686

    GDB(GNU调试器)是这个调试器的核心,它是开源社区广泛使用的C/C++程序调试工具。 首先,让我们深入了解QT Creator。QT Creator是一款集成开发环境(IDE),由QT公司开发,用于编写QT应用程序。它集成了编辑器、...

    GDB调试程序-入门级

    详细并且全面的GDB入门,易理解。 内容: 一、 GDB概述 二、系统认识GDB 三、GDB的命令概貌 ...六、调试已运行的程序 七、查看栈信息 八、查看源程序 九、查看运行时数据 十、查看寄存器 十一、改变程序的执行

    用GDB调试程序 用GDB调试程序

    GDB 是一个强大的命令行调试工具,主要帮忙用户完成四个方面的功能:启动程序、设置断点、检查程序状态和动态改变程序执行环境。GDB 的强大之处在于其可以形成执行序列,形成脚本,非常容易集成在一起,使用几个简单...

    qtcreator-gdb-7.4-MINGW32_NT-6.1-i686 QtCreator 的调试器

    Qt Creator 是一个强大的集成开发环境(IDE),专为使用 Qt 框架进行跨平台应用程序开发而设计。它集成了代码编辑、构建管理、调试和版本控制等多种功能于一身,极大地提高了开发效率。在给定的标题和描述中,重点...

    GDB调试程序文档

    - 使用core dump文件进行调试: `gdb &lt;program&gt; core` #### 四、GDB与图形化调试器的对比 - **命令行VS图形界面**: - GDB的优点在于其强大的命令行功能,可以灵活地控制调试流程。 - 图形化调试器如VC++等则提供...

    100个gdb调试技巧-高清书签版

    - 为调试进程产生core dump文件并加载可执行程序和core dump文件。 14. 记录与分享 - 记录执行GDB的过程,这对于后期分析和分享调试经验很有用。 - 编写关于GDB使用的小技巧的文档,并通过markdown语法进行格式...

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

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

    qtcreator-gdb-7.4-MINGW32_NT-6.1-i686.tar QT4 调试器

    在压缩包的文件名称列表中,尽管没有列出具体子文件,但通常会包含GDB的可执行文件、库文件以及可能的配置文件,这些内容将被解压到合适的位置,以便QT Creator能够识别并使用这个调试器。安装和配置时,需要确保GDB...

    gdb-7.3.1-1-mingw32

    在GDB的上下文中,"bin"可能包含GDB的主程序、库文件以及可能的依赖项,这些文件都需要放在正确的位置以便于Eclipse CDT能够调用和使用GDB进行调试。 总结来说,这个压缩包提供了一个适用于MinGW环境且专为Eclipse ...

Global site tag (gtag.js) - Google Analytics