Gdb формат файла не распознан
Я пытаюсь отладить простую программу "hello world" C++ на Ubuntu 16.04, но gdb не может распознать формат исполняемого файла. Тем не менее, я могу успешно запустить исполняемый файл в командной строке. Вот код
Я компилирую файл программы TestProject.cpp с помощью команды
Затем для отладки я даю команду
Кажется, что-то испорчено с машиной Ubuntu. Потому что я могу отлаживать ту же программу на другой виртуальной машине Ubuntu 16.04.
2 ответа
Я нахожусь на виртуальной машине XP под управлением GNU Visual Debugger 1.2.6, пытаясь открыть файл Ada (.adb), но постоянно получаю следующую ошибку: не в исполняемом формате: формат файла не распознан Я должен также упомянуть, что я установил как набор компиляторов Ada, так и инструменты win32.
У меня есть файл сценария с именем 'simple'. Я могу запустить его с помощью . / simple, и все работает нормально, как и должно. Мне нужно запустить этот файл в GDB, чтобы проследить, как изменяется один конкретный параметр и какими функциями он вызывается. когда я пытаюсь (gdb) file simple.
Почти наверняка комментарий ks1322 является правильным:
- Вы установили 64-bit GCC, поэтому ваш ./hello -это двоичный файл 64-bit (используйте file ./hello для подтверждения).
- Вы установили 32-разрядный только GDB, поэтому он не знает, как отлаживать двоичные файлы x86_64 .
Исправление простое: установите 64-bit GDB (который способен отлаживать как 32, так и 64-bit двоичных файлов) или создайте hello в 32-разрядном режиме (с g++ -m32 . ).
Похожие вопросы:
Я написал программу, сохранил ее на рабочем столе под именем Swap.cpp , и когда я запускаю gdb (в первый раз), я получаю ошибку: /Users/ myname /Desktop/Swap: не в исполняемом формате: формат файла.
Мне нужно отладить вирус bouncing ball (обратите внимание, что он написан в win16 asm), чтобы закончить свое эссе. Попытка использовать GDB, но он сказал: не в исполняемом формате. Формат файла не.
Я использую общую библиотеку. Который я использую для кросс-компиляции моего исполняемого файла. На этапе компоновки компоновщик выдает ошибку формат файла не распознан. Когда я запускаю ld на нем.
Я нахожусь на виртуальной машине XP под управлением GNU Visual Debugger 1.2.6, пытаясь открыть файл Ada (.adb), но постоянно получаю следующую ошибку: не в исполняемом формате: формат файла не.
У меня есть файл сценария с именем 'simple'. Я могу запустить его с помощью . / simple, и все работает нормально, как и должно. Мне нужно запустить этот файл в GDB, чтобы проследить, как изменяется.
Я пытаюсь отладить свой проект, который состоит из 5 файлов. Я построил проекта с помощью make-файлов-система. Мой Makefile выглядит следующим образом: CC=gcc CFLAGS= -g -c all: main.o io_ops.o.
Я попытался отладить свой двоичный файл (называемый click) с помощью gdb. Когда я выполняю gdb ./click У меня есть следующая ошибка GNU gdb (Ubuntu 7.10-1ubuntu2) 7.10 Copyright (C) 2015 Free.
Я отлаживаю decode_raw_op_test от TensorFlow. Тестовый файл написан на языке python, однако он выполняет код из базовых файлов C++. Используя pdb, я мог бы отладить тестовый файл python, однако он.
Я пытаюсь отладить определенную программу под названием xdf с gdb, но когда я запускаю gdb xdf, я получаю следующую ошибку.
Я пытаюсь отладить свой проект, состоящий из 5 файлов. Я построил проект с помощью Makefiles-системы. Мой Makefile выглядит следующим образом:
Мой исполняемый файл называется db. Итак, я запускаю на своем терминале следующую команду:
Затем я набираю в gdb следующую команду:
Я получаю следующую ошибку: main.c не определен Я пытаюсь ввести следующую команду:
Я получаю следующую ошибку: main.c: не в исполняемом формате: файл не распознан
Чтобы убедиться, что мой gdb является 64-битной программой, я набрал следующую команду:
И это некоторая информация о моем исполняемом файле:
db: 64-разрядный исполняемый файл LSB ELF, x86-64, версия 1 (SYSV), динамически подключаемый (использует общие библиотеки), для GNU / Linux 2.6.24, BuildID [sha1] = 25731950b7f76cf428eeca5fcc534555d677f3dc, без удаления
Не знаю, в чем проблема. Есть идеи?
2 ответа
Что вы хотите сделать, это list main.c:1
list не предназначен для перечисления файла в том виде, как вы его используете. Из справки gdb:
(gdb) список справки
Перечислить указанную функцию или строку.
Без аргумента перечисляет еще десять строк после или вокруг предыдущего списка.
«list -» перечисляет десять строк перед предыдущим десятистрочным списком.
Один аргумент указывает строку, и вокруг этой строки перечислено десять строк. Два аргумента с запятой между ними определяют начальную и конечную строки списка. Линии можно указать следующими способами:
LINENUM, чтобы перечислить эту строку в текущем файле,
ФАЙЛ: ЛИНЕНУМ, чтобы перечислить эту строку в этом файле,
FUNCTION, чтобы перечислить начало этой функции,
FILE: FUNCTION, чтобы различать статические функции с одинаковыми именами.
* АДРЕС, чтобы перечислить строку, содержащую этот адрес.
С двумя аргументами, если один пуст, он означает десять строк от другого аргумента.
Скорее всего, вы захотите вместо этого list main .
Пояснение: существует четыре формы команды list , ни одной взять имя файла в качестве аргумента.
Я пытаюсь использовать GDB для отладки (чтобы найти раздражающий segfault). Когда я бегу:
из командной строки я получаю следующую ошибку:
Когда я выполняю:
Я получаю следующую информацию:
Я использую GDB 6.1, а исполняемый файл скомпилирован с помощью gcc версии 3.4.6.
Я немного не в себе с точки зрения использования gdb, но, насколько я могу судить, в этом случае он должен работать. Есть идеи, что не так?
Ответы 5
Исполняемый файл является 64-битным (x86-64), а отладчик - 32-битной (i686-pc-linux) сборкой. Возможно, вам потребуется установить 64-битную (x86-64) версию отладчика.
благодаря. Я подумал, что это может быть проблемой, и оказалось, что 64-разрядная версия gdb установлена по более неясному пути на том же компьютере.
Спасибо - у меня возникла эта проблема после установки пакета debian gdb: i386 и некоторых других несколько дней назад, чтобы избежать создания chroot для сборки i386 версии пакета debian.
Для меня это было почти то же самое, когда я не мог отлаживать приложение для Android из QtCreator. 32-битный gdbserver использовался, в то время как у меня было 64-битное устройство Android
Вопрос относится к «./filename» и к «/ путь / исполняемый файл». Это один и тот же файл?
Если вы делаете посмертный анализ, вы должны запустить:
Если вы собираетесь игнорировать основной файл, вы должны запустить:
В обоих случаях « 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
Я пытаюсь использовать GDB для отладки (чтобы найти раздражающий segfault). Когда я бегу:
из командной строки, я получаю следующую ошибку:
когда я выполнить:
Я получаю следующую информацию:
Я использую GDB 6.1, и исполняемый файл скомпилирован с GCC версии 3.4.6.
Я немного не в своей воде с точки зрения использования gdb, но, насколько я могу сказать, он должен работать в этом случае. Есть идеи, что не так?
исполняемый файл 64-разрядный (x86-64), а отладчик-32-разрядная (i686-pc-linux) сборка. Возможно, потребуется установить 64-разрядную (x86-64) версию отладчика.
Я не уверен, что это ваша проблема, но я сталкивался с этой ситуацией очень часто. Исполняемый файл в дереве сборки build by make / automake не является двоичным, а скриптом, поэтому вы не можете использовать gdb с ним. Попробуйте установить приложение и изменить каталог, потому что иначе gdb попытается отладить скрипт.
вопрос относится к "./ filename " и "/ path / исполняемый файл". Это тот же файл?
Если вы делаете посмертный анализ, вы бы запустить:
Если вы собираетесь игнорировать основной файл, вы должны запустить:
В обоих случаях, ' executable-file ' означает путь к двоичному файлу, который вы хотите отладить. Обычно это на самом деле простое имя файла в текущем каталоге, так как у вас есть исходный код из сборки отладки там.
на Solaris 64-разрядная сборка GDB должна быть способна отлаживать как 32-разрядные, так и 64-разрядные исполняемые файлы (хотя у меня были некоторые проблемы с последними версиями GDB). Я не уверен в обратном - что 32-битный GDB обязательно может отлаживать 64-битные исполняемые файлы.
то, что вам нужно проверить, на самом деле является библиотекой bfd. The двоичный файл дескриптора библиотека-это то, что binutils / gdb использует для фактического анализа и обработки двоичных файлов (ELF / a.вне etc..).
вы можете видеть текущие Поддерживаемые платформы через objdump;
кажется, ваш отладчик GNU ( gdb ) не поддерживает архитектуру x86_64.
так попробуй символы отладки отладчик ( lldb ), который призван заменить его. Он поддерживает наборы инструкций i386, x86-64 и ARM.
он доступен по умолчанию на BSD / OS X, на Linux установить через: sudo apt-get install lldb (или использовать yum ).
посмотреть: gdb в lldb командная карта страница для получения дополнительной информации.
Читайте также: