探索Linux Core Dump:使用C程序和Sleep命令生成

在Linux系统中,我们可以通过C程序或sleep命令来生成core dump。

  1. 使用C程序生成core dump:我们可以编写一个简单的C程序,使其发生段错误(segmentation fault),从而生成core dump。这通常涉及到尝试访问一个空指针或未分配的内存。编译并运行这个程序后,它会崩溃并生成一个core dump。
  2. 使用sleep命令生成core dump :我们可以启动一个sleep进程,并使用kill命令向其发送SIGSEGV信号。这将导致进程崩溃并生成core dump。这种方法的优点是不需要编写任何代码,但可能不适用于所有进程,因为一些进程可能有机制来捕获和处理SIGSEGV信号。

在生成core dump之前,需要确保系统已经启用了core dump。这通常可以通过ulimit -c unlimited命令来实现。下面详细的来介绍一下这两种方法。

使用C 程序生成Core dump

要在 Linux 中测试core dump功能,你可以创建一个会崩溃的简单程序,然后检查是否生成了core dump文件。以下是一个使用 C 语言的例子:

  1. 创建一个会导致段错误(segmentation fault)的简单 C 程序。例如:

#include <stdio.h>

int main() {

int *ptr = NULL;

printf("%d\n", *ptr);

return 0;

}

将此代码保存在名为 crash.c 的文件中。

  1. 编译程序:

gcc -g -o crash crash.c

-g 选项包含调试信息,这在分析核core dump时会很有用。

  1. 启用core dump:

ulimit -c unlimited

此命令将创建的核心文件的最大大小设置为无限制。默认情况下,可能禁用了core dump,此命令将启用它们。

  1. 运行程序:

./crash

这将导致段错误并创建core dump。core dump文件的名称将取决于你的核心模式。

  1. 你现在应该在当前目录中有一个core dump文件。你可以使用以下命令进行检查:

ls core*

这将列出所有以 core 开头的文件。

  1. 现在,你可以使用像 gdb 这样的调试器来分析core dump:

gdb ./crash core

core 替换为你的core dump文件的实际名称。这将启动 gdb 并加core dump储。从这里开始,你可以使用各种 gdb 命令来分析core dump。

使用sleep来生成core dump

在 linux中生成core dump,你可以使用 kill 命令向正在运行的进程发送 SIGSEGV 信号。如果启用了core dump,此信号将导致进程崩溃并生成core dump。

以下是一个简单的例子:

首先,启动一个在后台运行的进程。例如,你可以启动一个 sleep 进程: 这将启动一个在后台运行 10000 秒的 sleep 进程。

sleep 10000 &

找到进程的进程 ID (PID)。你可以使用 ps 命令来做这个:

ps -e | grep sleep

这将输出一行类似于以下的内容:

12345 pts/0 00:00:00 sleep

在这个例子中,PID 是 12345。

向进程发送 SIGSEGV 信号: 将 12345 替换为你的进程的实际 PID。

kill -SIGSEGV 12345

这将导致进程崩溃并生成core dump。

请注意,这只是一个简单的例子,可能不适用于所有进程。一些进程有捕获和处理 SIGSEGV 信号的机制,当它们收到此信号时,可能不会崩溃或生成core dump。

相关推荐
妫以明19 分钟前
特辑:Ubuntu,前世今生
linux·运维·ubuntu
kfepiza26 分钟前
Linux的NetworkManager的nmcli配置网桥(bridge) 笔记250712
linux·运维·网络·笔记·tcp/ip·ip·tcp
麟城Lincoln29 分钟前
【Linux-云原生-笔记】系统引导修复(grub、bios、内核、系统初始化等)
linux·笔记·云原生·bios·grub·系统修复·系统引导
53Hz33 分钟前
【问题记录】kmemleak 定位内存泄露
linux
53Hz34 分钟前
【调试工具】taskset 设置处理器的亲和度
linux
真成运维34 分钟前
生产环境变更 AppSpace存储切换
linux
53Hz39 分钟前
【调试工具】coredump 使用示例
linux
53Hz40 分钟前
【问题记录】进程调度导致 UDP 丢包问题分析
linux
53Hz41 分钟前
【调试工具】pstore 工具配置及使用
linux
53Hz43 分钟前
【问题记录】如何打包两个dtb文件
linux