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

一.生成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。
    这三个文件一起提供了对系统核心转储行为的控制,允许管理员根据需求进行配置和调整以满足系统的要求。对这些文件的设置需要谨慎,以确保系统的稳定性和安全性。

相关推荐

  1. root用户安装git lfs(git大文件)命令记录

    2024-04-25 00:22:01       19 阅读
  2. Linux如何切换root用户

    2024-04-25 00:22:01       16 阅读
  3. (root用户root用户)linux下安装最新版tmux

    2024-04-25 00:22:01       14 阅读
  4. ubuntu生成 设置 core文件

    2024-04-25 00:22:01       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-25 00:22:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-25 00:22:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-25 00:22:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-25 00:22:01       20 阅读

热门阅读

  1. CSS transition和animation的用法和区别

    2024-04-25 00:22:01       15 阅读
  2. [普及][NOIP2016 普及组] 回文日期

    2024-04-25 00:22:01       12 阅读
  3. 数据结构 - 链表详解二 - 无头单向非循环链表

    2024-04-25 00:22:01       11 阅读
  4. 上海计算机学会 2024年4月月赛 丙组T1 最大公约数

    2024-04-25 00:22:01       17 阅读
  5. C++中输入输出速度的优化

    2024-04-25 00:22:01       12 阅读
  6. Chisel3 入门 (1)

    2024-04-25 00:22:01       10 阅读
  7. int和byte数组相互转换详解

    2024-04-25 00:22:01       14 阅读
  8. 测试开发-celery框架详解

    2024-04-25 00:22:01       14 阅读
  9. n-gram模型

    2024-04-25 00:22:01       11 阅读