GDB nicht ELF 64-Bit-Programm mit „Dateiformat nicht erkannt“ läuft
Frage
Ich versuche GDB debuggen zu verwenden (eine lästige segfault zu finden). Wenn ich laufen:
gdb ./filename
von der Kommandozeile, bekomme ich folgende Fehlermeldung:
This GDB was configured as "i686-pc-linux-
gnu"..."/path/exec": not in executable
format: File format not recognized
Wenn ich ausführen:
file /path/executable/
Ich erhalte die folgenden Informationen:
ELF 64-bit LSB executable, AMD x86-64,
version 1 (SYSV), for GNU/Linux 2.4.0,
dynamically linked (uses shared libs), not stripped
Ich bin mit GDB 6.1, und der ausführbaren Datei ist mit gcc Version 3.4.6 zusammengestellt.
Ich bin ein wenig aus meinem Wasser in Bezug auf gdb verwenden, aber soweit ich das sagen kann, es sollte in diesem Fall arbeiten. Irgendwelche Ideen, was falsch läuft?
Lösung
Die ausführbare Datei ist 64-bit (x86-64) und der Debugger ist ein 32-Bit (i686-pc-linux) zu bauen. Möglicherweise müssen Sie eine 64-Bit (x86-64) Version des Debuggers installieren.
Andere Tipps
Ich bin mir nicht sicher, ob dies das Problem ist, aber ich konfrontierte sehr oft diese Situation. Die ausführbare Datei in dem Build-Baum, baut durch make / auto ist kein binäre, sondern ein Skript, so dass Sie nicht gdb mit ihm verwenden können. Versuchen Sie, die Anwendung zu installieren und das Verzeichnis zu ändern, weil sonst GDB versucht, das Skript zu debuggen.
Die Frage bezieht sich auf "./filename" und "/ path / ausführbar". Sind diese die gleiche Datei?
Wenn Sie eine post-mortem-Analyse tun, würden Sie laufen:
gdb executable-file core-file
Wenn Sie gehen, um die Core-Datei zu ignorieren, würden Sie laufen:
gdb executable-file
In beiden Fällen ‚executable-file
‘ einen Pfad zu dem binär Sie debuggen mögen. Die meisten in die Regel, das ist eigentlich ein einfachen Dateinamen im aktuellen Verzeichnis, da Sie den Quellcode von Ihrer Debug-Build haben es.
Unter Solaris eine 64-Bit-Version von GDB sollte in der Lage sein, beide zu debuggen 32-Bit- und 64-Bit-Programme (obwohl ich einige Probleme mit neueren Versionen von GDB gehabt habe). Ich bin mir nicht sicher, ob die Umkehrung - das ist ein 32-Bit-GDB notwendigerweise 64-Bit-Programme debuggen können
.Was Sie checken müssen, ist wirklich die BFD-Bibliothek. Die Binärdatei Descriptor Bibliothek ist, was binutils / gdb verwendet, um tatsächlich zu analysieren und Griff Binärdateien (ELF / a.out etc ..).
Sie können die aktuellen unterstützten Plattformen über objdump sehen;
# 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
Es scheint, Ihr GNU Debugger (gdb
) nicht x86_64-Architektur unterstützt.
So versuchen LLDB Debugger (lldb
), die es ersetzen soll. Es unterstützt i386, x86-64 und ARM-Befehlssätze.
Es ist standardmäßig auf BSD / OS X zur Verfügung, unter Linux installieren über: sudo apt-get install lldb
(oder benutzen Sie yum
).
. Siehe: gdb Befehl Karte Seite für weitere Informationen LLDB