Gdb формат файла не распознан
Я пытаюсь отладить определенную программу под названием xdf с помощью gdb, но когда я запускаю gdb xdf, я получаю следующую ошибку:
Программа символически связана, и вывод file /home/nealtitusthomas/X-ray_astronomy/heasoft-6.24/x86_64-pc-linux-gnu-libc2.27/bin/xdf :
Приведенное здесь решение Ошибка gdb не в исполняемом формате: формат файла не распознан говорит, что это связано с тем, что установленный gdb является 32-разрядной версией, а программа - 64-разрядной. Однако моя установка GDB - 64-битная. Это подтверждается следующим:
И . какой формат у ../../ftools/x86_64-pc-linux-gnu-libc2.27/bin/xdf ?
Это сценарий оболочки POSIX, текстовый исполняемый файл ASCII.
Neal Titus Thomas
Neal Titus Thomas
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно.
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей.
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то.
Ответы 2
Вы пытаетесь использовать GDB в сценарии оболочки. Так же, как он пытается вам сказать, GDB не знает, что с этим делать.
В общем, вы почти всегда должны использовать вместо этого file -L /home/. - эта команда разыменует любые символические ссылки и сообщит вам, что это за файл, после, разрешающий все символические ссылки.
POSIX shell script, ASCII text executable
Вы пытаетесь отладить сценарий оболочки. GDB не знает, как это сделать.
Вам нужно посмотреть внутри в этом сценарии оболочки (с помощью редактора по вашему выбору), выяснить, какой двоичный файл действительный он в конечном итоге вызывает, и отладить его.
Скрипты оболочки оболочки обычно выглядят примерно так:
Что вам нужно сделать, так это заменить последнюю строку на:
и запустите сценарий оболочки xdf в обычном режиме. Теперь он будет автоматически вызывать GDB.
Я обнаружил, что исходный сценарий - это сценарий tcl, который находится в /home/nealtitusthomas/X-ray_astronomy/heasoft-6.24/ftools/BL D / x86_64-pc-linux-gn u-libc2.27 / lib / xtcl / .xdfrc. Однако я не могу заставить gdb запустить его. Я получаю ошибку не в исполняемом формате.
Я пытаюсь использовать 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 командная карта страница для получения дополнительной информации.
Я пытаюсь использовать GDB для отладки (чтобы найти раздражающий segfault). Когда я бегу:
из командной строки я получаю следующую ошибку:
Когда я выполняю:
Я получаю следующую информацию:
Я использую GDB 6.1, а исполняемый файл скомпилирован с помощью gcc версии 3.4.6.
Я немного не в себе с точки зрения использования gdb, но, насколько я могу судить, в этом случае он должен работать. Есть идеи, что не так?
5 ответы
Исполняемый файл является 64-битным (x86-64), а отладчик - 32-битной (i686-pc-linux) сборкой. Возможно, вам потребуется установить 64-битную (x86-64) версию отладчика.
ответ дан 11 дек '08, 16:12
Благодарю. Я подумал, что это может быть проблемой, и оказалось, что 64-разрядная версия gdb установлена по более неясному пути на том же компьютере. - pbh101
Спасибо - у меня возникла эта проблема после установки пакета debian gdb: i386 и некоторых других несколько дней назад, чтобы избежать создания chroot для сборки i386 версии пакета debian. - франкстер
Для меня это было почти то же самое, когда я не мог отлаживать приложение для Android из QtCreator. 32-битный gdbserver использовался, в то время как у меня было 64-битное устройство Android - сразу717
Не уверен, что это ваша проблема, но я очень часто сталкивался с такой ситуацией. Исполняемый файл в дереве сборки, созданный make / automake, является не двоичным файлом, а скриптом, поэтому вы не можете использовать с ним gdb. Попробуйте установить приложение и сменить каталог, иначе GDB попытается отладить скрипт.
Это не моя проблема, но я это проверял. Спасибо за помощь. Насколько я могу судить, ты можешь бежать file в исполняемом файле, чтобы узнать, является ли он двоичным. - pbh101
@quinmars, не могли бы вы подробнее объяснить, что вы имеете в виду под Try to install the application and change the directory , у меня была такая же проблема, при проверке типа файла это было POSIX shell script - Хади Эльсахар
Вопрос относится к "./filename" и к "/ путь / исполняемый файл". Это один и тот же файл?
Если вы делаете посмертный анализ, вы должны запустить:
Если вы собираетесь игнорировать основной файл, вы должны запустить:
В обоих случаях, ' executable-file 'означает путь к двоичному файлу, который нужно отлаживать. Чаще всего это простое имя файла в текущем каталоге, поскольку там у вас есть исходный код отладочной сборки.
В Solaris предполагается, что 64-битная сборка GDB может отлаживать как 32-битные, так и 64-битные исполняемые файлы (хотя у меня были некоторые проблемы с последними версиями GDB). Я не уверен в обратном - что 32-битный GDB обязательно может отлаживать 64-битные исполняемые файлы.
Что вам нужно проверить, это действительно библиотеку bfd. В дескриптор двоичного файла библиотека - это то, что binutils / gdb использует для анализа и обработки двоичных файлов (ELF / a.out и т. д.).
Вы можете увидеть текущие поддерживаемые платформы через objdump;
Создан 14 июля '09, 04:07
Кажется, ваш GNU Debugger ( gdb ) не поддерживает архитектуру x86_64.
Поэтому постарайтесь Отладчик LLDB ( lldb ), который призван заменить его. Он поддерживает наборы инструкций i386, x86-64 и ARM.
Он доступен по умолчанию в BSD / OS X, в Linux устанавливается через: sudo apt-get install lldb (или используйте yum ).
См.: карта команд gdb в lldb страница для получения дополнительной информации.
ответ дан 04 авг.
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками c gcc debugging gdb or задайте свой вопрос.
Я пытаюсь использовать GDB для отладки (чтобы найти раздражающий segfault). Когда я бегу:
из командной строки я получаю следующую ошибку:
Когда я выполняю:
Я получаю следующую информацию:
Я использую GDB 6.1, а исполняемый файл скомпилирован с помощью gcc версии 3.4.6.
Я немного не в себе с точки зрения использования gdb, но, насколько я могу судить, в этом случае он должен работать. Есть идеи, что не так?
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно.
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей.
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то.
Ответы 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) версию отладчика.
Благодарю. Я подумал, что это может быть проблемой, и оказалось, что 64-разрядная версия gdb установлена по более неясному пути на том же компьютере.
Спасибо - у меня возникла эта проблема после установки пакета debian gdb: i386 и некоторых других несколько дней назад, чтобы избежать создания chroot для сборки i386 версии пакета debian.
Для меня это было почти то же самое, когда я не мог отлаживать приложение для Android из QtCreator. 32-битный gdbserver использовался, в то время как у меня было 64-битное устройство Android
Не уверен, что это ваша проблема, но я очень часто сталкивался с такой ситуацией. Исполняемый файл в дереве сборки, созданный make / automake, является не двоичным файлом, а скриптом, поэтому вы не можете использовать с ним gdb. Попробуйте установить приложение и сменить каталог, иначе GDB попытается отладить скрипт.
Это не моя проблема, но я это проверял. Спасибо за помощь. Насколько я могу судить, вы можете запустить file исполняемый файл, чтобы проверить, является ли он двоичным.
@quinmars, не могли бы вы объяснить немного больше, что вы имеете в виду Try to install the application and change the directory , у меня была такая же проблема, при проверке типа файла это было POSIX shell script
Вопрос относится к "./filename" и к "/ путь / исполняемый файл". Это один и тот же файл?
Если вы делаете посмертный анализ, вы должны запустить:
Если вы собираетесь игнорировать основной файл, вы должны запустить:
В обоих случаях " executable-file " означает путь к двоичному файлу, который нужно отлаживать. Чаще всего это простое имя файла в текущем каталоге, поскольку там у вас есть исходный код отладочной сборки.
В Solaris предполагается, что 64-битная сборка GDB может отлаживать как 32-битные, так и 64-битные исполняемые файлы (хотя у меня были некоторые проблемы с последними версиями GDB). Я не уверен в обратном - что 32-битный GDB обязательно может отлаживать 64-битные исполняемые файлы.
Читайте также: