程序出现SIGSEGV ,Segmentation fault 等错误,没有提示所在的行位置,无法定位问题,这时就需要用到CORE DUMP文件。
在此CORE 不是核心的意思,而是只内存。
1.一般linux不会产生CORE DUMP文件,通过ulimit -c来查看core dump文件的大小,一般开始是0,可以设置core文件大小,ulimit -c 1024(kbytes单位)或者ulimit -c unlimited。
2.输出目录一般是当前目录,或者可以在/proc/sys/kernel中找到core-user-pid,通过
echo "1" > /proc/sys/kernel/core-user-pid使core文件名加上pid号,还可以用
mkdir -p /root/corefile
echo "/root/corefile/core-%e-%p-%t" > /proc/sys/kernel/core-pattern 控制core文件保存位置和文件名格式。
以下是参数列表:
%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加命令名
3.用GDB查看
下面我们可以在发生运行时信号引起的错误时发生core dump了.编译时加上-g
发生core dump之后, 用gdb进行查看core文件的内容, 以定位文件中引发core dump的行.
gdb [exec file] [core file]
如:
gdb ./test test.core
在进入gdb后, 用bt命令查看backtrace以检查发生程序运行到哪里, 来定位core dump的文件行.
5. 给个例子
test.c
#include <stdio.h>
void a(){
char *p = NULL;
printf("%d/n", *p);
}
int main()
{
a();
return 0;
}
编译 gcc -g -o test test.c
运行 ./test
报segmentation fault(core dump)
gdb ./test test.core如果生成的是test.core.(我在UBUNTU上生成的的是CORE文件)
分享到:
相关推荐
**如何使用coredump** 在Linux操作系统中,当一个程序异常崩溃时,系统默认可能会生成一个名为`core`的文件,这个文件称为core dump,也叫核心转储文件。它是程序运行时内存状态的一个快照,包含了程序的内存映像、...
标题《Coredump简介及使用》和描述《Android Coredump简介及使用_v1.0_***.pdf》揭示了文档主要介绍Coredump的基本概念、产生的原因、控制产生Coredump的方法以及如何使用Coredump文件。Coredump机制广泛存在于多个...
在Linux环境下,MySQL数据库的使用过程中,遇到故障或者异常情况时,我们可能需要利用coredump来分析程序崩溃的原因。coredump是系统记录进程崩溃时内存状态的文件,它可以帮助开发者定位问题所在。以下是对在Linux...
### Coredump 使用详解 #### 一、Coredump 概述 在 Linux 系统中,当进程遇到无法处理的错误或异常时,系统可能会生成一个名为 coredump 的文件。这个文件实际上是对出现问题时刻进程内存的一个快照,包含了程序...
2. 分析 Core Dump 文件:使用 GDB 调试器来分析 Core Dump 文件,了解系统崩溃的原因。 3. 加载符号表:使用 file 命令加载符号表,以便后续的分析。 4. 定位段错误:使用 where 命令来定位段错误的位置。 5. 分析...
- 在C++代码中,我们可以使用`MiniDumpWriteDump`函数来生成Coredump文件。这个函数来自`dbghelp.dll`库,需要在项目中链接此库。 - 示例代码: ```cpp #include #include void ...
- **加载core dump文件**:首先,需要使用`gdb`加载core dump文件: ```sh gdb -c <corefile> ``` 其中`<corefile>`是core dump文件的路径,`<executable>`是导致core dump的程序的可执行文件路径。 - **查看...
使用 `ulimit -a` 命令可以查看当前嵌入式 Linux 操作系统是否可以生成 coredump 文件,如果 coredump 对应的值为 0,则当前环境无法生成 coredump 文件。要开启当前嵌入式 Linux 操作系统生成 coredump 文件,可以...
在IT行业中,Core Dump是一种非常重要的调试手段,它记录了程序在崩溃时内存的状态,包括进程的寄存器信息、堆栈轨迹以及内存映射等。对于开发者来说,利用Core Dump进行问题排查能够帮助我们快速定位和修复软件中的...
通过理解如何获取gdb、生成未剥离的可执行文件、创建和使用core dump,以及在gdb中进行调试,开发者能够有效地定位和修复程序中的错误,提高软件的稳定性和可靠性。在实际开发中,结合源代码分析,这些技巧能够极大...
Core Dump 文件调试是指使用 GDB 调试 Core Dump 文件的过程。Core Dump 文件是操作系统执行的一个动作,当某个进程因为一些原因意外终止(crash)的时候,操作系统会将这个进程当时的内存信息转储(dump)到磁盘上...
2. 使用GDB加载Coredump文件。 3. 使用bt(backtrace)命令查看崩溃时的函数调用栈。 4. 使用list命令查看函数调用栈中指定函数的源码。 5. 查看变量和寄存器的值,了解崩溃时程序的状态。 Coredump分析的关键点...
Linux Core Dump 权威书籍
2. 使用gdb加载:`gdb <崩溃程序> <core dump文件>`,进行调试。 3. 查看调用堆栈:`backtrace`命令列出崩溃时的函数调用序列。 4. 分析变量值:通过`print`或`p`命令查看关键变量的值。 5. 源码级分析:结合`addr2...
- 使用以下命令设置新的 core dump 文件路径: ```bash echo '/path/to/new/directory/%t-%e-%p-%c.core' > /proc/sys/kernel/core_pattern ``` 其中 `%t` 表示时间戳,`%e` 表示崩溃程序的名字,`%p` 表示...
如何在让docker中运行的进程生成core dump文件
在Linux系统中,调试是解决程序异常和错误的关键步骤,特别是在遇到程序崩溃并产生coredump时。coredump是操作系统在程序异常终止时保存的内存映像,包含了程序运行时的状态,如内存布局、堆栈信息、全局变量和...
本文将深入探讨如何利用core dump进行Linux应用程序的调试,特别关注使用gdb工具来解析core文件。 ### coredump的核心概念 #### 1. 何时产生core dump? 当进程接收到某些信号(如SIGSEGV)时,如果内核被配置为...
我们可以使用`gdb`(GNU调试器)来分析这个`coredump`。首先,确保`gdb`已经安装在你的Linux系统上,如果没有,可以通过包管理器(如`apt-get`或`yum`)进行安装。 接下来,我们需要`a.out`文件,这是编译后的可...
AIX 下的 core dump 分析入门.mht,html文档,请大家参考以下