2008-11-09 216 views
13

我想使用GDB進行調試(查找惱人的段錯誤)。當我運行:gdb無法運行ELF 64位程序「文件格式無法識別」

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,並且th e可執行文件使用gcc版本3.4.6進行編譯。

在使用gdb方面,我有點失控,但據我所知它應該在這種情況下工作。任何想法出了什麼問題?

回答

21

可執行文件是64位(x86-64),調試器是32位(i686-pc-linux)版本。您可能需要安裝64位(x86-64)版本的調試器。

+1

謝謝。我認爲這可能是問題所在,並且事實證明,在同一臺機器上安裝了一個更隱蔽路徑的64位gdb版本。 – pbh101 2008-11-10 07:38:07

+1

謝謝 - 爲了避免創建一個chroot來構建一個i386版本的debian軟件包,我在幾天前安裝了debian gdb:i386軟件包和一些其他軟件之後,遇到了這個問題。 – frankster 2014-03-27 15:59:07

4

問題涉及「./filename」和「/ path/executable」。這些是同一個文件嗎?

如果你正在做一個事後分析,你可以運行:

gdb executable-file core-file 

如果你要忽略核心文件,你可以運行:

gdb executable-file 

在這兩種情況下, 'executable-file'表示要調試的二進制文件的路徑名。通常情況下,這實際上是當前目錄中的簡單文件名,因爲您的調試版本中包含源代碼。

在Solaris上,64位版本的GDB應該能夠調試32位和64位可執行文件(儘管我在最近版本的GDB中遇到了一些問題)。我不確定相反情況 - 32位GDB可能必須調試64位可執行文件。

5

我不確定這是否是您的問題,但我經常遇到這種情況。構建樹中由make/automake構建的可執行文件不是二進制文件,而是腳本,因此無法使用gdb。嘗試安裝應用程序並更改目錄,否則gdb會嘗試調試腳本。

2

你需要檢查的是真正的bfd庫。 binary file descriptor庫是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 
1

看來你的GNU調試器(gdb)不支持x86_64架構。

因此請嘗試LLDB Debuggerlldb),其目的是取代它。它支持i386,x86-64和ARM指令集。

它在BSD/OS X上默認提供,在Linux上通過安裝:sudo apt-get install lldb(或使用yum)。

請參閱:gdb to lldb command map page for more info。

相關問題