You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需通过GDB运行进程即可保存核心转储?进程过快GDB无法捕获

无需GDB运行进程即可生成核心转储的方法

针对进程结束过快、GDB来不及捕获的场景,以下几种方法可以直接生成核心转储文件:

1. 开启系统自动核心转储

这是最通用的方案,内核会在进程异常终止时自动生成核心文件:

  • 临时开启核心转储限制:执行ulimit -c unlimited,允许当前会话生成无大小限制的核心文件(重启终端后失效)。
  • 永久开启核心转储限制:编辑/etc/security/limits.conf,添加两行:
    * soft core unlimited
    * hard core unlimited
    
    保存后重新登录系统生效。
  • 配置核心文件命名规则:避免多个进程的核心文件互相覆盖,执行echo "core.%p.%t" > /proc/sys/kernel/core_pattern,生成的核心文件会带上进程ID(%p)和时间戳(%t)。要永久生效,编辑/etc/sysctl.conf添加kernel.core_pattern = core.%p.%t,再执行sysctl -p加载配置。

完成上述配置后,进程异常退出时会在当前工作目录(或core_pattern指定的路径)自动生成核心文件,无需提前附加调试工具。

2. 使用systemd-coredump捕获(systemd系统适用)

如果你的系统使用systemd,自带的coredump服务可以自动捕获所有进程的核心转储,包括快速退出的进程:

  • 确保systemd-coredump服务运行:执行systemctl status systemd-coredump,未运行则启动并设置开机自启:
    systemctl start systemd-coredump
    systemctl enable systemd-coredump
    
  • 查看已捕获的核心文件:执行coredumpctl list,会列出所有捕获到的核心转储记录。
  • 提取核心文件:执行coredumpctl dump <进程PID/可执行文件名> --output=core.dump,将核心文件保存到指定路径。

3. 用脚本结合gcore提前捕获

如果进程是你手动启动的,可以用脚本在进程启动瞬间触发核心转储:

#!/bin/bash
# 启动进程并后台运行
./your_process &
# 获取进程PID
PID=$!
# 立即触发核心转储(ptrace机制会暂停进程完成转储)
gcore $PID

若进程启动后瞬间退出,脚本可能无法获取到PID,此时可以结合strace延迟进程执行:

strace -e execve -o /dev/null ./your_process &
PID=$!
gcore $PID

strace会拦截execve系统调用,给gcore足够时间附加进程。

内容的提问来源于stack exchange,提问作者Erikli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:50:23