`
isiqi
  • 浏览: 16590285 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

用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调试详解 讲述如何使用gdb调试以及调试core dump

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

    coredump文件调试

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

    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之在线调试与Coredump分析

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

    用GDB调试程序 - Ubuntu中文1

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

    Linux下生成core dump

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

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

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

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

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

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

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

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

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

    gdb-7.2-1-mingw32

    GDB 是一款强大的开源调试器,用于C、C++以及其他支持的语言,它允许程序员在程序运行时检查和控制程序的状态,从而进行调试和问题排查。 描述中的“配置 Eclipse C 平台是要用到的 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编译器...

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

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

    GDB调试程序-入门级

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

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

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

    GDB调试程序文档

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

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

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

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

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

Global site tag (gtag.js) - Google Analytics