当前位置:首页 > 系统教程 > 正文

[Linux仓库] 调试 Segmentation fault 的利器:手把手教你开启和使用 Core Dump (Linux 进阶调试指南)

[Linux仓库] 调试 Segmentation fault 的利器:手把手教你开启和使用 Core Dump (Linux 进阶调试指南)

在 Linux 开发过程中,Segmentation fault(段错误)是每个程序员的噩梦。这种错误通常发生在程序试图访问未授权的内存地址时。为了快速定位问题,Linux Core Dump 技术成为了不可或缺的调试利器。本文将深入浅出地教你如何配置和利用 Core Dump 文件进行 Segmentation fault 调试

一、什么是 Core Dump?

Core Dump(核心转储)是指当程序由于异常(如段错误)而崩溃时,操作系统将程序当时的内存状态、寄存器信息、堆栈指针等数据记录下来的文件。它是研究 Linux 进程信号 触发异常后的第一手现场资料。

[Linux仓库] 调试 Segmentation fault 的利器:手把手教你开启和使用 Core Dump (Linux 进阶调试指南) Linux  进程信号 开启教程 第1张

二、Core Dump 开启教程:三步搞定配置

1. 解除资源限制

默认情况下,Linux 系统为了节省磁盘空间,限制了 Core 文件的大小为 0。我们需要通过 ulimit 命令来开启它:

ulimit -c unlimited

* 注:此命令仅对当前终端有效。若想永久生效,需修改 /etc/security/limits.conf 文件。

2. 设置 Core 文件保存路径

我们可以自定义 Core 文件的生成路径和命名规则。修改 /proc/sys/kernel/core_pattern 文件:

echo "/tmp/core-%e-%p-%t" | sudo tee /proc/sys/kernel/core_pattern

这里的参数含义:%e 是程序名,%p 是进程号,%t 是时间戳。这是完成 Core Dump 开启教程 的关键步骤。

三、实战演示:捕获段错误

编写一个简单的 C 程序 test.c,故意制造段错误:

#include <stdio.h>int main() {    int *ptr = NULL;    *ptr = 10; // 触发 Segmentation fault    return 0;}

编译运行:gcc -g test.c -o test && ./test。你会发现目录下生成了一个名为 core-test-xxxx 的文件,这就是 Linux 调试利器 为我们准备的现场证据。

四、使用 GDB 解析 Core 文件

有了 Core 文件后,我们可以直接进入“凶案现场”:

gdb ./test /tmp/core-test-xxx

进入 GDB 后输入 bt (backtrace),你将能直接看到程序在哪一行崩溃。通过分析 Linux 进程信号 (SIGSEGV),我们可以轻松完成 Segmentation fault 调试

本文涉及关键词:

Linux Core Dump, Segmentation fault 调试, Linux 进程信号, Core Dump 开启教程