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

从Core Dump读取CPU寄存器时GDB报文件格式不识别的原因

解决GDB读取Core Dump时的"file format not recognized"错误

先还原下你的场景:你写了一个循环打印信息的C程序:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

void main(){

  char *variable = "CodeName0...";
  while (1){
    
    printf("%s\n%d\n","hello from gencore code source",getpid());

    sleep(2);
  }
  exit(0);
}

运行后用kill -6 <进程ID>发送SIGABRT生成了core文件,但用GDB查看时弹出了"0x7fffd7f6de10s": not in executable format: file format not recognized的错误,没法读取CPU寄存器内容。

错误原因

这个报错几乎都是因为GDB的启动参数顺序错了——你可能直接把core文件当成可执行程序来加载了(比如输入gdb core),或者把core文件和程序文件的顺序搞反了。GDB需要先知道对应的可执行程序,再加载core dump文件,否则它没法解析core里的内容。

正确的操作步骤

  1. 先确保程序编译时带调试信息(可选但推荐)
    重新编译程序时加上-g参数,这样GDB能显示更清晰的调试信息:

    gcc -g your_program.c -o your_program
    

    (把your_program换成你实际的程序名称)

  2. 用GDB正确加载程序和core文件
    执行以下命令,先指定可执行程序,再指定core文件:

    gdb ./your_program core
    
  3. 查看寄存器内容
    进入GDB后,输入以下命令查看所有寄存器:

    info registers
    

    在x86_64架构的系统上,你要找的IP寄存器对应的是rip,也可以单独查看它:

    info rip
    

额外排查点

  • 检查core文件是否正常生成:执行file core,如果输出显示类似core: core file from './your_program',说明文件没问题;如果显示不是core文件,可能是系统限制了core文件大小——执行ulimit -c查看,若输出为0,说明被禁用了,执行ulimit -c unlimited就能允许生成无限制大小的core文件。
  • 确认GDB架构匹配:你的系统是x86_64,执行gdb --version,确认输出里有x86_64字样,避免装成32位GDB导致不兼容。

内容的提问来源于stack exchange,提问作者Djebarra Rabah Abderrazak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:45:38