c gcc debugging gdb

gdb no ejecuta el programa ELF de 64 bits con "Formato de archivo no reconocido"



g++ (5)

La pregunta se refiere a "./filename" y a "/ path / executable". ¿Son estos el mismo archivo?

Si está haciendo un análisis post mortem, debería ejecutar:

gdb executable-file core-file

Si va a ignorar el archivo central, debería ejecutar:

gdb executable-file

En ambos casos, '' executable-file '' significa una ruta de acceso al binario que desea depurar. Por lo general, en realidad es un nombre de archivo simple en el directorio actual, ya que tiene allí el código fuente de su compilación de depuración.

En Solaris, se supone que una compilación de 64 bits de GDB puede depurar ejecutables tanto de 32 bits como de 64 bits (aunque he tenido algunos problemas con versiones recientes de GDB). No estoy seguro de lo contrario: que un GDB de 32 bits necesariamente puede depurar ejecutables de 64 bits.

Estoy tratando de usar GDB para depurar (para encontrar una segfault molesto). Cuando corro:

gdb ./filename

desde la línea de comando, aparece el siguiente error:

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

Cuando ejecuto:

file /path/executable/

Obtengo la siguiente información:

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

Estoy usando GDB 6.1, y el ejecutable está compilado con la versión 3.4.6 de gcc.

Estoy un poco fuera de mi alcance en términos de usar gdb, pero hasta donde sé, debería funcionar en este caso. Alguna idea de lo que va mal?


No estoy seguro de si este es su problema, pero enfrenté esta situación muy a menudo. El ejecutable en el árbol de compilación, compilado por make / automake no es un archivo binario, sino un script, por lo que no puede usar gdb con él. Intente instalar la aplicación y cambie el directorio, porque else gdb intenta depurar el script.


El ejecutable es de 64 bits (x86-64) y el depurador es una compilación de 32 bits (i686-pc-linux). Es posible que deba instalar una versión de 64 bits (x86-64) del depurador.


Lo que necesita verificar, es realmente la biblioteca de bfd. La biblioteca de descriptores de archivos binarios es lo que binutils / gdb usa para analizar y manejar binarios (ELF / a.out, etc.).

Puede ver las plataformas actuales compatibles a través de 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


Parece que su Depurador GNU ( gdb ) no es compatible con la arquitectura x86_64.

Así que prueba LLDB Debugger ( lldb ) que tiene como objetivo reemplazarlo. Admite conjuntos de instrucciones i386, x86-64 y ARM.

Está disponible por defecto en BSD / OS X, en la instalación de Linux a través de: sudo apt-get install lldb (o use yum ).

Consulte la página del mapa de comandos de gdb to lldb para obtener más información.