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

如何通过bash或python脚本实现core dump分析日志自动导出

该需求完全可以实现,以下分别提供Bash、Python两种可直接使用的实现方案:

Bash 实现方案

利用gdb原生支持的批处理模式即可跳过交互式操作,直接执行预设的分析命令并输出日志:

#!/bin/bash
# 用法:./analyze_core.sh <目标二进制文件> <core dump文件>

if [ $# -ne 2 ];then
    echo "用法错误:$0 <目标二进制文件> <core dump文件>"
    exit 1
fi

BIN_FILE=$1
CORE_FILE=$2

gdb --batch "${BIN_FILE}" "${CORE_FILE}" \
  -ex "set logging file gdb.txt" \
  -ex "set logging on" \
  -ex "bt full" \
  -ex "info threads" \
  -ex "thread apply all bt full" \
  -ex "quit"

echo "分析完成,结果已写入gdb.txt"

脚本说明:--batch参数指定gdb运行在批处理模式,执行完所有-ex指定的命令后自动退出,不会进入交互界面。你可以根据自己的分析需求增减-ex后的gdb命令。

Python 实现方案

基于Python标准库subprocess调用gdb批处理能力,无需安装第三方依赖:

import subprocess
import sys

def analyze_core(bin_path: str, core_path: str, log_path: str = "gdb.txt") -> None:
    # 自定义需要执行的gdb命令列表,可按需增减
    gdb_commands = [
        f"set logging file {log_path}",
        "set logging on",
        "bt full",
        "info threads",
        "thread apply all bt full",
        "quit"
    ]
    # 构造完整执行命令
    run_cmd = ["gdb", "--batch", bin_path, core_path]
    for cmd in gdb_commands:
        run_cmd.extend(["-ex", cmd])
    
    try:
        subprocess.run(
            run_cmd,
            check=True,
            capture_output=True,
            text=True
        )
        print(f"分析完成,日志已写入:{log_path}")
    except subprocess.CalledProcessError as e:
        print(f"gdb执行失败,错误信息:{e.stderr}")

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print(f"用法:python3 {sys.argv[0]} <目标二进制文件> <core dump文件>")
        sys.exit(1)
    analyze_core(sys.argv[1], sys.argv[2])
注意事项
  • 使用前请确保目标二进制文件与生成core dump时的程序版本完全一致,且编译时添加了-g参数保留调试符号,否则会出现调用栈解析失败、地址无法翻译的问题
  • 脚本中的gdb命令可根据分析需求自行调整,比如需要查看寄存器信息可添加命令info registers,需要查看指定内存内容可添加x <内存地址>相关命令
  • 若不需要全线程调用栈,可删除thread apply all bt full对应行,减少日志体积

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:24:02