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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top