赞
踩
Core dump 是指在程序异常终止时,操作系统将程序的内存映像保存到磁盘上的一种机制。
在 Linux 系统中,core dump 提供了一种调试程序错误的重要方式,它记录了程序在崩溃时的内存状态,可以帮助开发人员定位问题
常见的 core dump 错误通常是程序在运行过程中发生了严重的错误或异常,导致操作系统强制终止了程序并生成了 core dump 文件。以下是一些常见的导致 core dump 的错误:
一、怎么生成 core dump?
使用 ulimit 命令来控制生成 core dump 的条件,比如通过 ulimit -c unlimited
命令来设置允许生成任意大小的 core dump
先查看系統默认:ulimit -c
命令用于显示当前用户的 core dump 文件的大小限制。输出结果的含义如下:
截图如下:
核心转储文件的大小通常受到操作系统或系统管理员配置的限制,可以使用 ulimit 命令来调整生成 core dump 文件的最大大小
二、core文件含义以及相关参数?
core
或者 core.<pid>
,其中 <pid>
是崩溃程序的进程 ID相关的配置参数如下:
修改 /proc/sys/kernel/core_pattern
文件来配置 core dump 文件的生成路径和文件名格式
通过 ulimit -c
命令来设置 core 文件的最大大小限制
三、如何分析core dump文件?
使用 GNU Debugger (GDB) 等调试工具来分析 core dump 文件。通过加载 core 文件和对应的可执行文件,可以获取崩溃时的堆栈跟踪、变量值等信息,帮助定位程序错误
使用 gdb <executable> <corefile>
命令来加载可执行文件和 core 文件,并进入 GDB 调试环境
要排查 core dump,通常需要分析 core 文件以及程序的源代码。以下是排查 core dump 的一般步骤:
下面是一个简单的示例,演示如何排查一个导致 core dump 的 C 程序:
#include <stdio.h>
void cause_crash() {
char *ptr = NULL;
*ptr = 'A'; // 尝试在空指针上进行写操作,导致段错误
}
int main() {
cause_crash();
return 0;
}
编译该程序:gcc -o demo demo.c
执行程序,会触发 core dump:./demo
使用 GDB 分析 core 文件:gdb ./demo core
在 GDB 中可以使用命令 bt 查看堆栈跟踪:
(gdb) bt
#0 0x00005555555546e8 in cause_crash () at demo.c:6
#1 0x0000555555554701 in main () at demo.c:11
通过分析堆栈跟踪,可以发现问题出现在 cause_crash 函数的第 6 行,即空指针引用导致了段错误。在这个示例中,问题相对简单,修复方法可能是在写操作前添加对指针的空指针检查
无法生成一个core-dump文件,有好些原因
一开始以为是被限制的文件大小或者不让他输出导致
查看core file size的大小
此处更改为无限制看看
后续发现此类问题还有一种原因:(挂载点的内存无可用,导致一直写入不进)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。