在开发和使用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 Core Dump 分析方法实例介绍 本文将通过实例来介绍 Linux 中如何进行 Core Dump 分析,解决死机问题。 一、Core Dump 介绍 Core Dump 是 Linux 系统中一种特殊的文件,它记录了系统崩溃或死机时的系统状态...
在本文档中,我们将详细探讨如何在Red Hat Linux系统中生成core dump,并通过调整系统配置来确保core dump文件的生成。 #### 二、Core Dump的生成与配置 ##### 1. 修改系统默认配置 - **/etc/profile**中的配置:...
使用 `ulimit -a` 命令可以查看当前嵌入式 Linux 操作系统是否可以生成 coredump 文件,如果 coredump 对应的值为 0,则当前环境无法生成 coredump 文件。要开启当前嵌入式 Linux 操作系统生成 coredump 文件,可以...
### Ubuntu Linux 下程序崩溃生成 Core Dump 的方法 #### 一、Linux 下 Core Dump 文件 **Core Dump 文件** 是一种在程序崩溃时由操作系统自动生成的文件,它包含了程序崩溃时刻的内存快照以及相关的系统状态信息...
Core Dump 文件的产生是由于进程收到某个信号的时候,Linux 上现在大概有 60 多个信号,可以使用 kill -l 命令全部列出来。常见的信号包括 SIGSEGV、SIGILL、SIGFPE、SIGBUS 等。这些信号通常是由于数组越界、空指针...
在Windows操作系统上,生成Coredump文件对于调试和分析C++程序崩溃原因至关重要。Coredump文件包含了程序崩溃时内存中的关键信息,如进程的内存映射、全局变量、堆栈信息等,使得开发者能够定位到问题的具体位置,...
Linux Core Dump 权威书籍
`coredump`是Linux系统在程序异常崩溃时生成的一种文件,它包含了程序崩溃时刻的内存映像,用于后期分析错误原因。本文将深入探讨如何利用`coredump`进行问题排查。 标题提到的"Linux Debugging: coredump 分析的...
### Linux下产生Core Dump文件及使用GDB调试详解 #### 一、Core文件的基本概念与作用 当一个程序因为某些原因而崩溃时,系统内核会自动创建一个名为`core`的文件,这个文件包含了程序崩溃时刻的内存映像以及其他...
当一个运行在Linux上的应用程序因为某种原因异常终止(如段错误、除零错误等)时,操作系统可以被配置为生成一个`coredump`文件。这个文件包含了程序崩溃时的内存映像、寄存器状态以及其他相关信息,使得开发者能够...
如何在让docker中运行的进程生成core dump文件
本资料"coredump问题原理探究-Linux x86版"聚焦于Linux环境下,特别是x86架构下的核心转储文件分析,旨在帮助开发者深入理解core dump的工作机制,并提供有效的定位和解决问题的方法。 一、core dump的基本概念 1. ...
在Linux系统中,调试是解决程序异常和错误的关键步骤,特别是在遇到程序崩溃并产生coredump时。coredump是操作系统在程序异常终止时保存的内存映像,包含了程序运行时的状态,如内存布局、堆栈信息、全局变量和...
在Linux系统中,当应用程序遇到不可恢复的错误时,如段错误(Segmentation fault),系统会生成一个核心转储文件(core dump)。这个文件包含了进程崩溃时刻的内存映像、寄存器状态以及堆栈信息,是分析和调试程序...
标题《Coredump简介及使用》和描述《Android Coredump简介及使用_v1.0_***.pdf》揭示了文档主要介绍Coredump的基本概念、产生的原因、控制产生Coredump的方法以及如何使用Coredump文件。Coredump机制广泛存在于多个...
Linux Core Dump 是 Linux 系统中的一种错误处理机制,当进程崩溃或发生错误时,操作系统会将进程的内存 dump 到一个文件中,以便于后续的调试和错误分析。本节将详细介绍 Linux Core Dump 的配置和调试方法。 一、...
Linux 系统调用 Core Dump 漏洞攻击防御策略 Linux 操作系统是当今最流行的操作系统之一,然而,Linux 系统调用 Core Dump 漏洞攻击的出现却给系统安全带来了巨大的威胁。 Core Dump 漏洞是 Linux 内核 2.6.15-...
生成dump文件的方法通常涉及Windows API中的MiniDumpWriteDump函数,该函数是Microsoft提供的用于创建内存转储文件的接口。下面将详细解释这个过程: 1. **理解dump文件**:Dump文件是一个包含进程内存状态的文件,...
“Core dump解析工具”是一种专门用于读取和分析core dump文件的软件。高通的core dump解析工具可能针对其特定的硬件架构和操作系统进行了优化,能够提供更详细的调试信息,这对于在高通芯片上运行的应用或者系统...