Я пытаюсь использовать GDB для отладки (чтобы найти раздражающий segfault). Когда я бегу:
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, а исполняемый файл скомпилирован с помощью gcc версии 3.4.6.
Я немного не в себе с точки зрения использования gdb, но, насколько я могу судить, в этом случае он должен работать. Есть идеи, что не так?





Исполняемый файл является 64-битным (x86-64), а отладчик - 32-битной (i686-pc-linux) сборкой. Возможно, вам потребуется установить 64-битную (x86-64) версию отладчика.
Спасибо - у меня возникла эта проблема после установки пакета debian gdb: i386 и некоторых других несколько дней назад, чтобы избежать создания chroot для сборки i386 версии пакета debian.
Для меня это было почти то же самое, когда я не мог отлаживать приложение для Android из QtCreator. 32-битный gdbserver использовался, в то время как у меня было 64-битное устройство Android
Вопрос относится к «./filename» и к «/ путь / исполняемый файл». Это один и тот же файл?
Если вы делаете посмертный анализ, вы должны запустить:
gdb executable-file core-file
Если вы собираетесь игнорировать основной файл, вы должны запустить:
gdb executable-file
В обоих случаях «executable-file» означает путь к двоичному файлу, который нужно отлаживать. Чаще всего это простое имя файла в текущем каталоге, поскольку там у вас есть исходный код отладочной сборки.
В Solaris предполагается, что 64-битная сборка GDB может отлаживать как 32-битные, так и 64-битные исполняемые файлы (хотя у меня были некоторые проблемы с последними версиями GDB). Я не уверен в обратном - что 32-битный GDB обязательно может отлаживать 64-битные исполняемые файлы.
Не уверен, что это ваша проблема, но я очень часто сталкивался с такой ситуацией. Исполняемый файл в дереве сборки, созданный make / automake, является не двоичным файлом, а скриптом, поэтому вы не можете использовать с ним gdb. Попробуйте установить приложение и сменить каталог, иначе GDB попытается отладить скрипт.
Это не моя проблема, но я это проверял. Спасибо за помощь. Насколько я могу судить, вы можете запустить file с исполняемым файлом, чтобы проверить, является ли он двоичным.
@quinmars, не могли бы вы объяснить немного больше, что вы имеете в виду под Try to install the application and change the directory, у меня была такая же проблема, при проверке типа файла это был POSIX shell script
@HadyElsahar Под установить я имел в виду make install. Но на самом деле установка не требуется. Следуйте объяснениям здесь: sourceware.org/autobook/autobook/…
@quinmars, при выполнении libtool --mode=execute gdb th он все еще дает ту же ошибку. я переместил вопрос в другую ветку здесь stackoverflow.com/questions/30663780/…
Что вам нужно проверить, это действительно библиотеку bfd. Библиотека дескриптор двоичного файла - это то, что 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
Кажется, ваш отладчик GNU (gdb) не поддерживает архитектуру x86_64.
Поэтому попробуйте Отладчик LLDB (lldb), который призван заменить его. Он поддерживает наборы инструкций i386, x86-64 и ARM.
Он доступен по умолчанию в BSD / OS X, в Linux устанавливается через: sudo apt-get install lldb (или используйте yum).
См .: страницу карта команд gdb в lldb для получения дополнительной информации.
благодаря. Я подумал, что это может быть проблемой, и оказалось, что 64-разрядная версия gdb установлена по более неясному пути на том же компьютере.