Я получаю gdb от brew install gdb.
Содержимое исходного файла:
#include <cstdio>
int main(){
int a = 10;
for(int i = 0; i< 10; i++){
a += i;
}
printf("%d\n",a);
return 0;
}
Вот исполняемый файл с именем demo: https://pan.baidu.com/s/1wg-ffGCYzPGDI77pRxhyaw
Я компилирую исходный файл так:
c++ -g -o demo demo.cpp
И запускаем gdb
gdb ./demo
Но это не сработает. Он не может распознать исполняемый файл.
GNU gdb (GDB) 8.2
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin18.0.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
BFD: /Users/xxx/Codes/demo: unknown load command 0x32
BFD: /Users/xxx/Codes/demo: unknown load command 0x32
"/Users/xxx/Codes/demo": not in executable format: file format not recognized
Я использую file demo, его выход demo: Mach-O 64-bit executable x86_64
Я использую file ./demo, его вывод - ./demo: Mach-O 64-bit executable x86_64
Тип c++ -v, выход:
Apple LLVM version 10.0.0 (clang-1000.10.44.2)
Target: x86_64-apple-darwin18.0.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
запустите ./demo, его вывод будет 55
введите show configuration в gdb, он покажет:
This GDB was configured as follows:
configure --host=x86_64-apple-darwin18.0.0 --target=x86_64-apple-darwin18.0.0
--with-auto-load-dir=:${prefix}/share/auto-load
--with-auto-load-safe-path=:${prefix}/share/auto-load
--with-expat
--with-gdb-datadir=/usr/local/Cellar/gdb/8.2/share/gdb (relocatable)
--with-jit-reader-dir=/usr/local/Cellar/gdb/8.2/lib/gdb (relocatable)
--without-libunwind-ia64
--without-lzma
--without-babeltrace
--without-intel-pt
--disable-libmcheck
--without-mpfr
--with-python=/System/Library/Frameworks/Python.framework/Versions/2.7
--without-guile
--with-separate-debug-dir=/usr/local/Cellar/gdb/8.2/lib/debug (relocatable)
Кто может мне помочь ? Большое тебе спасибо !!!
Покажите, возможно, источник demo.cpp (или сделайте крошечный минимальный воспроизводимый пример). Попробуйте сначала с примером типа Привет, мир
Это очень похоже на sourceware.org/bugzilla/show_bug.cgi?id=13157, за исключением того, что это было исправлено в 8.2. Также обратите внимание, что есть некоторые исправления macOS, которые есть только в git master - и они необходимы, начиная, по крайней мере, с High Sierra.
Кроме того, я не думаю, что кто-либо, работающий над gdb, еще пробовал Mojave. Было бы здорово сообщить об ошибке в GDB. Еще лучше было бы прикрепить исполняемый файл типа "hello world" туда, где он не работает.
Пробовал как gdb 8.0, так и 8.2, та же проблема
Я столкнулся с той же проблемой на своем Mac. Вы можете попробовать lldb (который отлично работает), пока кто-нибудь не решит эту проблему.
Я попытался удалить gdb с помощью homebrew и переустановить его из источников, следуя руководству ЗданиеОнДарвин, но та же проблема
Я сообщил об этой ошибке # 23746 в исходное ПО.
@ChrisF - Я закрыл другой вопрос, потому что считал, что это дубликат. Но, как видите, сообщество не закрыло другой вопрос как дубликат. Следовательно, в данный момент это разные вопросы.

Я решил эту проблему в Мохаве, прорежив приложение. GDB не понимает универсальных двоичных файлов. Итак, если file myapp сообщает вам, что myapp является универсальным двоичным файлом, попробуйте следующее:
lipo -thin x86_64 -output myapp-x86_64 myapp
А потом
gdb myapp-x86_64
И я нет. В частности, я получаю это сообщение: фатальная ошибка: / Library / Developer / CommandLineTools / usr / bin / lipo: входной файл (a.out) должен быть толстым файлом, если указана опция -thin
Проблема в том, что clang-1000.11.45.2, распространяемый с Apple LLVM version 10.0.0, добавляет новую команду загрузки к исполняемым файлам o-mach с именем LC_BUILD_VERSION.
$ otool -l test.o
...
Load command 1
cmd LC_BUILD_VERSION
cmdsize 24
platform macos
sdk n/a
minos 10.14
ntools 0
...
От яблока источник:
/*
* The build_version_command contains the min OS version on which this
* binary was built to run for its platform. The list of known platforms and
* tool values following it.
*/
Таким образом, в настоящее время bfd (программа, используемая gdb для управления исполняемыми файлами) не может интерпретировать эту команду и возвращает ошибку.
В качестве временного решения вы можете отредактировать исходный код bfd, предоставляемый с помощью gdb.
Сначала загрузите исходники gdb-8.0.1 из зеркала. Затем добавьте в gdb-8.0.1/bfd/mach-o.c следующий код в строке 4649:
case BFD_MACH_O_LC_BUILD_VERSION:
break;
Наконец, внутри gdb-8.0.1/include/mach-o/loader.h в строке 189:
BFD_MACH_O_LC_BUILD_VERSION = 0x32
Не забудьте добавить , в конце строки 188 после BFD_MACH_O_LC_VERSION_MIN_WATCHOS = 0x30).
Затем обработайте классическую компиляцию gdb, следуя инструкциям из README:
run the ``configure'' script here, e.g.:
./configure
make
To install them (by default in /usr/local/bin, /usr/local/lib, etc),
then do:
make install
Не забудьте подписать gdb как объяснение здесь.
Если вы по-прежнему получаете ошибку (os / kern) failure (0x5), просто запустите sudo gdb.
Это временное решение, чтобы дождаться исправления от команды GNU.
РЕДАКТИРОВАТЬ
Binutils-gdb обновлен, эти изменения теперь реализованы в коммите fc7b364.
Надеюсь, это будет полезно.
Как использовать коммит, в котором вы редактировали? Я загрузил исходные файлы gdb-8.2 и попытался изменить их, как это было сделано. но есть файлы, которые я не могу найти.
Проблема исходит от bfd, а не непосредственно от gdb, bfd присутствует внутри пакета binutils. Вы можете получить binutils через git git clone git://sourceware.org/git/binutils-gdb.git. Следуйте инструкциям по компиляции и установке binutils, я использую gdb 8.0.1, чтобы избежать проблем с совместимостью.
Кто-нибудь проинформировал brew об этом обновлении? ОБНОВЛЕНИЕ: Да, discourse.brew.sh/t/…
Вероятно, мы хотим сделать проблему на GitHub: github.com/Homebrew/brew/issues
? Homebrew исправил его, больше нет необходимости в дополнительных действиях.
Правда проблема исправлена. Работает для Mojave 10.14.1 GDB 8.2 по состоянию на 04 декабря 2018 г.
Я опубликовал временную формулу заваривания, которая, похоже, работает, пока не обновит официальную формулу:
варить установить https://raw.githubusercontent.com/timotheecour/homebrew-timutil/master/gdb_tim.rb
Обновите GDB до версии 8.3. Также см. Ошибка 23728, сбой binutils в macOS 10.14 (Mojave) из-за отсутствия поддержки в трекере ошибок Binutils.
I've found the root of the issue. binutils does not handle load command 0x32 LC_BUILD_VERSION (nor 0x31 LC_NOTE, actually). They are defined in recent LLVM versions: see https://github.com/llvm-mirror/llvm/blob/master/include/llvm/BinaryFormat/MachO.def#L77
Looking at the output of objdump -private-headers there is one clear difference:
@@ -56,16 +56,18 @@ attributes NO_TOC STRIP_STATIC_SYMS LIVE reserved1 0 reserved2 0 Load command 1 - cmd LC_VERSION_MIN_MACOSX - cmdsize 16 - version 10.13 - sdk n/a + cmd LC_BUILD_VERSION + cmdsize 24 + platform macos + sdk n/a + minos 10.14 + ntools 0 Load command 2 cmd LC_SYMTAB cmdsize 24LC_VERSION_MIN_MACOSX is implemented in binutils, while LC_BUILD_VERSION is not. It is apparently new in Mojave.
GDB 8.3 еще не выпущен. Под обновлением вы подразумеваете компиляцию из последнего источника?
У меня есть хорошее решение от переполнения стека, и я не знаю, почему оно работает. Вот ссылка.
Я новичок в macOS и делаю следующее:
BFD: /Users/xxx/Codes/demo: unknown load command 0x32Unknown Error -2,147,414,007.
Solve this by getting the certificate in
Loginthen export it and import it intoSystem(Delete it from Login if unable to import).
ERROR: Unable to start debugging. Unexpected GDB output from command "-exec-run". Unable to find Mach task port for process-id 1510: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8)), согласно как отменить кодовый знак, что-то не так все еще существует, и ответ сообщает мне brew reinstall gdb, но он все еще не работает, я вчера позвонил.Надеюсь, мое решение поможет.
Я заставил gdb работать над Мохаве:
а) получение последнего исходного архива gdb (на момент написания, ftp://sourceware.org/pub/gdb/snapshots/current/gdb-weekly-8.2.50.20190212.tar.xz) - среди прочего, он добавляет обработку для распознавания исполняемых файлов на Mac.
б) построить gdb. У меня возникли ошибки затенения переменных в darwin-nat.c, поэтому я отредактировал файл и перестроил.
c) выполните шаги в https://forward-in-code.blogspot.com/2018/11/mojave-vs-gdb.html
Вуаля.
(источник: GDB на Mac / Mojave: во время запуска программа прерывается сигналом?, Неизвестный сигнал)
gdb 8.2, установленный из Homebrew, несовместим с Mac mojave. У меня обновление до 8.2.1. Вопрос должен быть решен.
Ответ от timotheecour выше сработал для меня:
варить установить https://raw.githubusercontent.com/timotheecour/homebrew-timutil/master/gdb_tim.rb
Затем мне пришлось сгенерировать самоподписанный сертификат, как в https://www.thomasvitale.com/how-to-setup-gdb-and-eclipse-to-debug-c-files-on-macos-sierra/
Какой
gdbвы используете? Как ты получил это? Вы скачали его исходный код с sourceware.org/gdb/download и скомпилировали его? Если да, то как вы его настроили? Если нет, покажите выводshow configurationвgdb. То же самое для вашегоc++(это GCC, Лязг, ....)? Покажите выводc++ -v. Можете ли вы запустить./demoв том же терминале? Что на выходеfile ./demo?