开启core dump文件生成模式

本文详细介绍了如何在Linux系统中编辑配置文件以修改core文件的生成方式,包括设置最大限制、使用-g编译选项、启用以进程ID命名core文件以及定义生成core文件的目录和名称格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、编辑/etc/profile 文件,在最后加上: ulimit -c unlimited

2、先把程序用-g 编译,注意后面不要strip掉

3、开启以pid命名core文件,echo "1" > /proc/sys/kernel/core_uses_pid

4、设置生成core文件的目录以及名字格式,echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

### 配置编译固件以支持生成 Core Dump 文件 为了使编固件能够生成核心转储 (core dump),需要从多个方面进行配置,包括操作系统级别的设置以及编译器的相关选项。 #### 1. 启用内核中的 Core Dump 功能 在 Linux 内核中,Core Dump 的功能依赖于特定的配置项。这些配置项可以通过 `make menuconfig` 或其他方式启用。以下是常见的相关配置项: - **CONFIG_ELF_CORE**:此选项用于支持 ELF 格式的 Core Dump 文件。 - **CONFIG_COREDUMP**:全局控制是否允许进程生成 Core Dump 文件。 确保在内核配置阶段启用了上述选项[^3]。 ```bash # 使用 make menuconfig 进入内核配置界面 $ make menuconfig ``` 导航到以下路径并启用对应选项: ``` General setup -> [*] Enable ELF core dumps Kernel hacking -> [*] Kernel debugging -> [*] Compile the kernel with debug info ``` #### 2. 设置 Core Pattern 通过调整 `/proc/sys/kernel/core_pattern` 文件的内容来定义 Core Dump 文件的命名规则和存储位置。例如,可以将其设置为自定义格式以便区分不同的崩溃场景。 执行如下命令以修改 Core Pattern[^5]: ```bash echo "core-%e-%p-%t" >/proc/sys/kernel/core_pattern ``` 其中: - `%e` 表示可执行文件名; - `%p` 是进程 ID; - `%t` 是时间戳。 如果希望将 Core Dump 文件保存至指定目录,则可以在模式字符串前加上绝对路径,比如 `/var/crash/core-%e-%p-%t`。 #### 3. 调整 ulimit 参数 默认情况下,某些系统的用户可能被限制不允许创建大型 Core Dump 文件。因此需确认当前用户的资源限制已解除。 运行以下指令检查及更改 ulimit 值[^4]: ```bash ulimit -c unlimited # 允许无大小上限的核心转储 ulimit -a # 查看所有资源限制状态 ``` #### 4. 编译时加入调试信息 当使用 GCC 工具链构建目标平台上的应用程序或者驱动模块时,建议附加 `-g` 参数保留完整的符号表数据供后续分析之用。此外还可以考虑开启优化级别较低(-O0/-O1)从而减少因高度优化而导致难以解读堆栈回溯的情况发生[^1]: ```bash gcc -Wall -Wextra -ggdb -O0 -o myapp myapp.c ``` 对于交叉编译环境而言,遵循官方推荐的做法往往可以获得更稳定的结果[^2]。即优先选用由项目维护者预构建好的专用版本而非通用发行版自带的那个实例来进行实际操作过程中的链接处理工作等等环节。 --- ### 示例代码片段展示如何验证 core dump 是否正常工作 下面给出了一段简单的 C 程序用来测试目的: ```c #include <stdio.h> #include <stdlib.h> int main() { int *ptr = NULL; printf("Attempting to dereference null pointer...\n"); *ptr = 1; // This will cause a segmentation fault and generate a core dump. return 0; } ``` 编译该源码的同时记得带上必要的标志位: ```bash mipsel-openwrt-linux-gcc -Wall -Wextra -ggdb -O0 -o test_core_dump test_core_dump.c ``` 随后加载调试工具准备解析产生的 coredump 数据包: ```bash mipsel-openwrt-linux-gdb ./test_core_dump (gdb) set solib-absolute-prefix /path/to/debug/root/ (gdb) file ./test_core_dump (gdb) core-file ./test_core_dump.core (gdb) bt full ``` 以上步骤完成后应该可以看到清晰明了的功能调用链条图景便于定位具体错误所在之处。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值