非Root用户编译C程序如何生成Core文件

本文详细介绍了非Root用户如何在编译C程序时生成core文件,包括设置核心转储文件大小、修改生成路径、指定目录及使用gdb分析。重点讲解了/proc/sys/kernel/core_pattern等核心转储相关设置文件的作用和用法。
摘要由CSDN通过智能技术生成

一.生成core文件的步骤

1.设置核心转储文件大小为不限制

#查询生成core文件限制:
$ ulimit -c
0 #--->0表示无法生成core文件
# 不设置大小限制
$ ulimit -c unlimited 

2.修改核心转储文件生成路径

编辑文件/proc/sys/kernel/core_pattern,,实际上这个文件显示的是当前系统所使用的核心转储文件生成模式。修改这个文件仅在临时情况下起作用。

3.指定core的生成目录为当前目录下

修改文件/proc/sys/kernel/core_pattern内容为core

# 非root用户情况
# 提前备份一下
$ cp /proc/sys/kernel/core_pattern ~/core_pattern_bak
$ sudo bash -c 'echo "core" > /proc/sys/kernel/core_pattern'

4.测试程序

segfault_example.c

#include <stdio.h>

int main() {
    int *ptr = NULL;
    printf("Attempting to dereference a null pointer...\n");
    *ptr = 42;  // 尝试解引用空指针
    return 0;
}

gcc -g segfault_example.c -o segfault_example
ulimit -c unlimited  # 设置生成无限制的核心文件大小

编译程序

$ ./segfault_example
Attempting to dereference a null pointer...
段错误 (核心已转储)
$ ls
core.75784   segfault_example  segfault_example.c

使用 gdb 工具可以分析生成的核心转储文件。运行以下命令:

$ gdb ./segfault_example core

这将启动 gdb 并加载程序和生成的核心文件,允许你查看导致段错误的情况。

image

二.核心转储相关设置文件

在系统的 /proc/sys/kernel/ 目录下有三个与核心转储相关的文件:core_patterncore_pipe_limitcore_uses_pid。这里是它们各自的作用和区别:

  1. core_pattern
  • 作用core_pattern 文件定义了生成核心转储文件的模式或路径。它指定何时以及如何产生核心转储文件,可以包含文件路径、文件名模式以及格式转换说明符。
  • 设置示例:例如,|/path/to/some_program %p %u %g 可以用来定义核心文件的路径及其命名方式。
  • 默认值:默认情况下,其值通常为 core,表示核心文件将在当前目录下生成一个名为 core 的文件。如果是/home/core,就是在/home下生成core文件。
  1. core_pipe_limit
  • 作用core_pipe_limit 文件定义核心转储的管道限制。这个限制指定了核心转储管道的大小限制,用于确定核心文件传输时的大小限制。
  • 设置示例:一般设置为系统内存大小的一部分,以确保适当但受控制的核心转储。
  • 默认值:默认情况下,其值取决于系统的内存设置。
  1. core_uses_pid
  • 作用core_uses_pid 文件指示是否在生成核心转储文件时使用进程 ID(PID)作为文件的一部分。这样可以帮助将核心转储文件与其生成的进程相关联。

  • 设置示例:值为 1 表示使用进程 ID,值为 0 表示不使用进程 ID。

  • 默认值:一般情况下,默认值为 1,表示使用进程 ID。
    区别

  • core_pattern 确定了核心转储文件的名称和路径。

  • core_pipe_limit 确定了核心转储管道的大小限制。

  • core_uses_pid 确定了是否在生成的核心转储文件中包含进程 ID。
    这三个文件一起提供了对系统核心转储行为的控制,允许管理员根据需求进行配置和调整以满足系统的要求。对这些文件的设置需要谨慎,以确保系统的稳定性和安全性。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西里小诸葛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值