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.