Linux程序崩溃core使用(续)

本文介绍如何在Linux系统中配置程序崩溃时生成core文件的方法,并详细解释了如何通过修改ulimit设置及指定core文件的生成路径来实现这一目标。
Linux查看调用堆栈的信息,只是需要更改Linux设置,使程序崩溃时候产生core文件。然后gdb调试即可。

1产生core文件方法

产生coredump的条件,首先需要确认当前会话的ulimit –c,若为0,则不会产生对应的coredump,需要进行修改和设置。

ulimit  -c unlimited  (可以产生coredump且不受大小限制),这种设置仅对当前生效,如果想永久生效

那么需要在/etc/profile中加入以下一行,这将允许生成coredump文件

ulimit-c unlimited 


2 更改core dump生成路径

因为core dump默认会生成在程序的工作目录,但是有些程序存在切换目录的情况,导致core dump生成的路径没有规律,

所以最好是自己建立一个文件夹,存放生成的core文件。

我建立一个 /data/coredump 文件夹,在根目录data里的coredump文件夹。

调用如下命令

echo /data/coredump/core.%e.%p> /proc/sys/kernel/core_pattern

将更改core文件生成路径,自动放在这个/data/coredump文件夹里。

%e表示程序名, %p表示进程id
Linux系统中,可以通过多种方式禁用程序崩溃时生成核心转储(core dump)文件的功能。以下是几种常见的方法: ### 1. 使用 `ulimit` 命令 `ulimit` 是一个用于控制 shell 和其启动进程资源限制的命令。要禁用 core 文件的生成,可以将 core 文件大小限制为 0。 ```bash ulimit -c 0 ``` 此命令仅对当前会话生效。如果希望永久生效,可以将其添加到 shell 的配置文件中(如 `/etc/profile` 或 `~/.bashrc`)。 ### 2. 修改 `/etc/security/limits.conf` 对于多用户环境,可以通过修改 `/etc/security/limits.conf` 文件来设置全局或特定用户的资源限制。 添加以下行以禁用所有用户的 core 文件生成: ``` * hard core 0 * soft core 0 ``` 或者,针对特定用户(例如用户 `example_user`): ``` example_user hard core 0 example_user soft core 0 ``` 修改后需要重新登录或重启系统才能生效。 ### 3. 禁用 Core Pattern Linux 内核通过 `/proc/sys/kernel/core_pattern` 文件定义 core 文件的存储路径和命名格式。可以通过修改该文件来禁用 core 文件的生成。 执行以下命令将 core 文件大小限制为 0: ```bash echo 0 > /proc/sys/kernel/core_pattern ``` 注意:这种方法可能不适用于所有 Linux 发行版,并且需要 root 权限。 ### 4. 使用 systemd 服务 如果系统使用 `systemd` 作为初始化系统,可以通过创建自定义服务单元文件来禁用 core 文件的生成。 创建一个服务文件,例如 `/etc/systemd/system/disable-coredump.service`,并添加以下内容: ```ini [Unit] Description=Disable Core Dump [Service] Type=oneshot ExecStart=/bin/sh -c "echo 0 > /proc/sys/kernel/core_pattern" [Install] WantedBy=multi-user.target ``` 启用并启动该服务: ```bash systemctl enable disable-coredump.service systemctl start disable-coredump.service ``` ### 5. 验证 Core Dump 设置 为了验证 core dump 是否已成功禁用,可以运行一个简单的测试程序并触发崩溃。 示例 C 程序: ```c #include <stdio.h> #include <stdlib.h> int main() { int *ptr = NULL; *ptr = 0; // 触发段错误 return 0; } ``` 编译并运行该程序: ```bash gcc -o test_coredump test.c ./test_coredump ``` 如果没有生成 core 文件,则表示设置已生效。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值