`
javatoyou
  • 浏览: 1069415 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Linux下调试core dump 文件的方法

 
阅读更多

在开发和使用Linux 程序时,引擎有时会莫名
其妙的core 掉,在网上查了一下,整理了一个简
单的调试core 文件的方法。
1、什么是core dump?
Core,即core memory,而dump 就是堆放的
意思。core dump 又叫核心转储,当程序运行过
程中发生异常,程序异常退出时,由操作系统把
程序当前的内存状况存储在一个core 文件中,
叫core dump。
2、如何打开core dump支持?
有的操作系统并没有默认打开core dump 支
持,需要用ulimit -c unlimited 语句进行设置,
core 文件生成的位置一般在程序运行的当前目
录下,文件名为core. 进程号( 当然不同的系统
也许有所不同,可以查看相手册对路径和文件名
进行设置).
3、Core dump的使用方法
首先应该在用gcc 进行编译时选择-g 选项,
以便起动debug 支持,生成可执行文件时ex,./
ex 运行可执行文件,如果程序当掉,则会生成
一个core 文件,假设为core.1568,则gdb ex
core.1568 进入gdb,然后再用where 命令进行
查看即可。
先看看我用的是个什么机器:
$ uname -a
再看看默认的一些参数,注意core file size
是个0,程序出错时不会产生core 文件了。
$ ulimit -a
core file size (blocks, -c) 0
……
写个简单的程序,看看core 文件是不是会被
产生。
(代码略)
$ gcc -Wall -g foo.c
$ ./a.out
Segmentation fault
$ ls -l core.*
ls: core.*: No such file or directory
没有找到core 文件,我们改改ulimit 的设置,
让它产生。1024 是随便取的,要是core 文件大
于1024 个块,就产生不出来了。
$ ulimit -c 1024
$ ulimit -a
core file size (blocks, -c) 1024
……
$ ./a.out
Segmentation fault (core dumped)
$ ls -l core.*
-rw------- 1 uniware uniware 53248
Jun 30 17:10 core.9128
注意看上述的输出信息,多了个(core
dumped)。确实产生了一个core 文件,9128 是
该进程的PID。我们用GDB 来看看这个core。
$ gdb --core=core.9128
(输出信息略)
(gdb) bt
#0 0x08048373 in ?? ()
#1 0xbfffd8f8 in ?? ()
#2 0x0804839e in ?? ()
#3 0xb74cc6b3 in ?? ()
#4 0x00000000 in ?? ()
此时用bt 看不到backtrace,也就是调用堆栈,
原来GDB 还不知道符号信息在哪里。我们告诉
它一下:

(gdb) file ./a.out

(gdb) bt
#0 0x08048373 in sub () at foo.c:17
#1 0x08048359 in main () at foo.c:8
此时backtrace 出来了。
在程序不寻常退出时,内核会在当前工作目
录下生成一个core 文件(是一个内存映像,同时
加上调试信息)。使用gdb 来查看core 文件,可
以指示出导致程序出错的代码所在文件和行数。
其他总结
1.core文件的生成开关和大小限制
1)使用ulimit -c 命令可查看core 文件的生
成开关。若结果为0,则表示关闭了此功能,不
会生成core 文件。
2)使用ulimit -c filesize 命令,可以限制
core 文件的大小(filesize 的单位为kbyte)。若
ulimit -c unlimited,则表示core 文件的大小不
受限制。如果生成的信息超过此大小,将会被裁
剪,最终生成一个不完整的core 文件。在调试
此core 文件的时候,gdb 会提示错误。
2.core文件的名称和生成路径
core 文件生成路径:
输入可执行文件运行命令的同一路径下。
若系统生成的core 文件不带其他任何扩展名
称,则全部命名为core。新的core 文件生成将
覆盖原来的core 文件。
1)/proc/sys/kernel/core_uses_pid 可以控
制core 文件的文件名中是否添加pid 作为扩展。
文件内容为1,表示添加pid 作为扩展名,生成的
core 文件格式为core.xxxx ;为0 则表示生成的
core 文件同一命名为core。
可通过以下命令修改此文件:
echo “1″ > /proc/sys/kernel/core_uses_
pid
2)proc/sys/kernel/core_pattern 可以控制
core 文件保存位置和文件名格式。
可通过以下命令修改此文件:
e c h o “/ c o r e f i l e / c o r e -%e -%p -%t” >
core_pattern,可以将core 文件统一生成到/
corefile 目录下,产生的文件名为core- 命令
名-pid- 时间戳
3.core文件的查看
core 文件需要使用gdb 来查看。
gdb ./a.out
core-file core.xxxx
使用bt 命令即可看到程序出错的地方。
以下两种命令方式具有相同的效果,但是在
有些环境下不生效,所以推荐使用上面的命令。
1)gdb -core=core.xxxx
file ./a.out
bt
2)gdb -c core.xxxx
file ./a.out
bt
4. 开发板上使用core 文件调试
在 PC 上调试开发板上产生的core 文件,需
要使用交叉编译器自带的gdb,并且需要在gdb
中指定solib-absolute-prefix 和 solib-searchpath
两个变量以保证gdb 能够找到可执行程序
的依赖库路径。有一种建立配置文件的方法,不
需要每次启动gdb 都配置以上变量,即:在待运
行gdb 的路径下建立.gdbinit。
配置文件内容:
set solib-abso lute-prefix YOUR_CROSS_
COMPILE_PATH
s e t s o l i b - s e a r c h - p a t h Y O U R _ C R O S S _
COMPILE_PATH
set solib-search-path YOUR_DEVELOPER_
TOOLS_LIB_PATH
handle SIG32 nostop noprint pass
注意:待调试的可执行文件,在编译的时候需
要加-g,core 文件才能正常显示出错信息!有
时候core 信息很大,可以通过挂载到PC 的方式
来规避这一点.


分享到:
评论

相关推荐

    linux coredump分析方法实例介绍

    Linux Core Dump 分析方法实例介绍 本文将通过实例来介绍 Linux 中如何进行 Core Dump 分析,解决死机问题。 一、Core Dump 介绍 Core Dump 是 Linux 系统中一种特殊的文件,它记录了系统崩溃或死机时的系统状态...

    Linux下生成core dump

    在本文档中,我们将详细探讨如何在Red Hat Linux系统中生成core dump,并通过调整系统配置来确保core dump文件的生成。 #### 二、Core Dump的生成与配置 ##### 1. 修改系统默认配置 - **/etc/profile**中的配置:...

    coredump文件的生成与解析.docx

    使用 `ulimit -a` 命令可以查看当前嵌入式 Linux 操作系统是否可以生成 coredump 文件,如果 coredump 对应的值为 0,则当前环境无法生成 coredump 文件。要开启当前嵌入式 Linux 操作系统生成 coredump 文件,可以...

    ubuntu-linux下程序崩溃生成coredump的方法.pdf

    ### Ubuntu Linux 下程序崩溃生成 Core Dump 的方法 #### 一、Linux 下 Core Dump 文件 **Core Dump 文件** 是一种在程序崩溃时由操作系统自动生成的文件,它包含了程序崩溃时刻的内存快照以及相关的系统状态信息...

    coredump文件调试

    Core Dump 文件的产生是由于进程收到某个信号的时候,Linux 上现在大概有 60 多个信号,可以使用 kill -l 命令全部列出来。常见的信号包括 SIGSEGV、SIGILL、SIGFPE、SIGBUS 等。这些信号通常是由于数组越界、空指针...

    window COREdump文件生成 c++代码

    在Windows操作系统上,生成Coredump文件对于调试和分析C++程序崩溃原因至关重要。Coredump文件包含了程序崩溃时内存中的关键信息,如进程的内存映射、全局变量、堆栈信息等,使得开发者能够定位到问题的具体位置,...

    Accelerated Linux Core Dump Analysis

    Linux Core Dump 权威书籍

    Linux Debugging: coredump 分析的材料

    `coredump`是Linux系统在程序异常崩溃时生成的一种文件,它包含了程序崩溃时刻的内存映像,用于后期分析错误原因。本文将深入探讨如何利用`coredump`进行问题排查。 标题提到的"Linux Debugging: coredump 分析的...

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

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

    Linux Debugging: coredump 分析入门的材料

    当一个运行在Linux上的应用程序因为某种原因异常终止(如段错误、除零错误等)时,操作系统可以被配置为生成一个`coredump`文件。这个文件包含了程序崩溃时的内存映像、寄存器状态以及其他相关信息,使得开发者能够...

    容器中生成coredump文件

    如何在让docker中运行的进程生成core dump文件

    coredump问题原理探究-Linux x86版.rar

    本资料"coredump问题原理探究-Linux x86版"聚焦于Linux环境下,特别是x86架构下的核心转储文件分析,旨在帮助开发者深入理解core dump的工作机制,并提供有效的定位和解决问题的方法。 一、core dump的基本概念 1. ...

    Linux Debugging(五): coredump 分析入門1

    在Linux系统中,调试是解决程序异常和错误的关键步骤,特别是在遇到程序崩溃并产生coredump时。coredump是操作系统在程序异常终止时保存的内存映像,包含了程序运行时的状态,如内存布局、堆栈信息、全局变量和...

    Linux应用程序调试之debug_coredump

    在Linux系统中,当应用程序遇到不可恢复的错误时,如段错误(Segmentation fault),系统会生成一个核心转储文件(core dump)。这个文件包含了进程崩溃时刻的内存映像、寄存器状态以及堆栈信息,是分析和调试程序...

    Coredump简介及使用

    标题《Coredump简介及使用》和描述《Android Coredump简介及使用_v1.0_***.pdf》揭示了文档主要介绍Coredump的基本概念、产生的原因、控制产生Coredump的方法以及如何使用Coredump文件。Coredump机制广泛存在于多个...

    linux core dump

    Linux Core Dump 是 Linux 系统中的一种错误处理机制,当进程崩溃或发生错误时,操作系统会将进程的内存 dump 到一个文件中,以便于后续的调试和错误分析。本节将详细介绍 Linux Core Dump 的配置和调试方法。 一、...

    劫持Linux系统调用封杀Core Dump漏洞攻击.pdf

    Linux 系统调用 Core Dump 漏洞攻击防御策略 Linux 操作系统是当今最流行的操作系统之一,然而,Linux 系统调用 Core Dump 漏洞攻击的出现却给系统安全带来了巨大的威胁。 Core Dump 漏洞是 Linux 内核 2.6.15-...

    c++ 生成dump文件小程序

    生成dump文件的方法通常涉及Windows API中的MiniDumpWriteDump函数,该函数是Microsoft提供的用于创建内存转储文件的接口。下面将详细解释这个过程: 1. **理解dump文件**:Dump文件是一个包含进程内存状态的文件,...

    高通core dump解析工具

    “Core dump解析工具”是一种专门用于读取和分析core dump文件的软件。高通的core dump解析工具可能针对其特定的硬件架构和操作系统进行了优化,能够提供更详细的调试信息,这对于在高通芯片上运行的应用或者系统...

Global site tag (gtag.js) - Google Analytics