14

我正在尝试使用 GDB 进行调试(以查找烦人的段错误)。当我运行时:

gdb ./filename

从命令行,我收到以下错误:

This GDB was configured as "i686-pc-linux-
gnu"..."/path/exec": not in executable 
format: File format not recognized

当我执行时:

file /path/executable/

我得到以下信息:

 ELF 64-bit LSB executable, AMD x86-64,
 version 1 (SYSV), for GNU/Linux 2.4.0, 
 dynamically linked (uses shared libs), not stripped

我使用的是 GDB 6.1,可执行文件是用 gcc 版本 3.4.6 编译的。

在使用 gdb 方面,我有点不知所措,但据我所知,它应该在这种情况下工作。任何想法出了什么问题?

4

5 回答 5

21

可执行文件是 64 位 (x86-64),调试器是 32 位 (i686-pc-linux) 版本。您可能需要安装 64 位 (x86-64) 版本的调试器。

于 2008-11-09T01:26:59.267 回答
5

我不确定这是否是您的问题,但我经常遇到这种情况。构建树中的可执行文件,通过 make/automake 构建的不是二进制文件,而是脚本,因此您不能将 gdb 与它一起使用。尝试安装应用程序并更改目录,因为否则 gdb 会尝试调试脚本。

于 2008-11-09T11:35:10.537 回答
4

该问题涉及“./filename”和“/path/executable”。这些是同一个文件吗?

如果您正在进行事后分析,您将运行:

gdb executable-file core-file

如果您要忽略核心文件,您将运行:

gdb executable-file

在这两种情况下,“ executable-file”都表示要调试的二进制文件的路径名。大多数情况下,这实际上是当前目录中的一个简单文件名,因为那里有来自调试版本的源代码。

在 Solaris 上,GDB 的 64 位构建应该能够调试 32 位和 64 位可执行文件(尽管我在 GDB 的最新版本中遇到了一些问题)。我不确定是否相反 - 32 位 GDB 必须调试 64 位可执行文件。

于 2008-11-09T09:18:44.290 回答
2

您需要检查的是真正的 bfd 库。二进制文件描述符库是 binutils / gdb 用于实际解析和处理二进制文件(ELF/a.out 等)的库。

可以通过objdump查看当前支持的平台;

# objdump -H

objdump: supported targets: elf32-powerpc aixcoff-rs6000 elf32-powerpcle ppcboot elf64-powerpc elf64-powerpcle elf64-little elf64-big elf32-little elf32-big srec symbolsrec tekhex binary ihex
objdump: supported architectures: rs6000:6000 rs6000:rs1 rs6000:rsc rs6000:rs2 powerpc:common powerpc:common64 powerpc:603 powerpc:EC603e powerpc:604 powerpc:403 powerpc:601 powerpc:620 powerpc:630 powerpc:a35 powerpc:rs64ii powerpc:rs64iii powerpc:7400 powerpc:e500 powerpc:MPC8XX powerpc:750

The following PPC specific disassembler options are supported for use with
the -M switch:
  booke|booke32|booke64    Disassemble the BookE instructions
  e300                     Disassemble the e300 instructions
  e500|e500x2              Disassemble the e500 instructions
  efs                      Disassemble the EFS instructions
  power4                   Disassemble the Power4 instructions
  power5                   Disassemble the Power5 instructions
  power6                   Disassemble the Power6 instructions
  32                       Do not disassemble 64-bit instructions
  64                       Allow disassembly of 64-bit instructions
于 2009-07-14T03:28:34.320 回答
1

看来您的 GNU 调试器 ( gdb) 不支持 x86_64 架构。

因此,请尝试旨在替换它的LLDB Debugger ( )。lldb它支持 i386、x86-64 和 ARM 指令集。

它在 BSD/OS X 上默认可用,在 Linux 上通过:(sudo apt-get install lldb或使用yum)安装。

有关更多信息,请参见:gdb 到 lldb 命令映射页面。

于 2015-08-04T21:03:15.803 回答