Независимо от того, что я пробовал, GDB просто не будет работать на моем Mac (Mojave).Распространенная ошибка, но я не нашел решений - PullRequest
0 голосов
/ 17 ноября 2018

это мой первый пост, поэтому я заранее извиняюсь, если напишу что-нибудь неправильное или неправильно отформатированное.

Моя система: MacBook Pro под управлением MacOS Mojave 10.14.1, Netbeans 8.2

Язапуск простой программы на C ++, которая печатает hello world:

int main(int argc, char** argv) {

    cout << "Hello World" << endl;

    return 0;
}

Так что моя проблема в том, что я не могу запустить отладчик на моем MacBook с помощью команд Netbeans или Terminal.Каждый раз, когда я делаю, я получаю следующую ошибку:

не в исполняемом формате: формат файла не распознан

У меня изначально была проблема, когда у меня отсутствовала команда отладчика,Я следовал указаниям здесь и установил Homebrew, получил gdb и подписал двоичный код gdb.После всего этого я начал выдавать ошибку, выделенную выше.

Я гуглю эту новую проблему и нахожу это сообщение о переполнении стека , которое предполагает, что я могу запустить 32-битный GDB при сборкев 64-битном.Тем не менее, основываясь на выводе при запуске gdb:

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/Anon/Desktop/gdb_test/gdb_test: unknown load command 0x32
BFD: /Users/Anon/Desktop/gdb_test/gdb_test: unknown load command 0x32
"/Users/Anon/Desktop/gdb_test/gdb_test": not in executable format: file format not recognized

и конфигурации 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)

("Relocatable" means the directory can be moved with the GDB installation tree, and GDB will still find it.)

Кажется, что моя GDB действительно 64-битная, поэтому я предполагаю,это не проблема.Я также нашел этот пост , где верхний ответ предполагает, что GDB 8.2 невозможно сломать, и я должен просто понизить до 8.0.1.Однако редактирование говорит, что обновление командой GNU (предположительно) решило проблему, поэтому я запускаю:

brew update

и проверяю, что все обновлено, но я все еще получаю ту же ошибку,

Я нахожусь в своем уме здесь, и я потратил слишком много времени, чтобы попытаться решить эту проблему.Если это не может быть исправлено, можете ли вы предложить другие беззаботные способы (большой акцент на без проблем), я могу отлаживать программы на C / C ++ на моем Mac?В противном случае, я буду придерживаться компьютерных лабораторий моего университета.

РЕДАКТИРОВАТЬ: вот как я скомпилировал из терминала

g++ -g main.cpp -o main

Я компилирую в режиме отладки (64-разрядный) в Netbeans со стандартом C ++ 14 с использованием компилятора g ++.

Я вызываю GDB после компиляции, записывая в терминал:

gdb main

или просто используя графический интерфейс вNetbeans

1 Ответ

0 голосов
/ 18 ноября 2018

Компиляторы в macOS сбивают с толку.Apple поставляет компилятор LLVM как часть Xcode, но предоставляет заглушку на /usr/bin/g++, которая заставляет людей поверить, что они используют GCC, то есть GNU Compiler Collection .Затем они пытаются использовать gdb, то есть GNU Debugger с исполняемыми файлами LLVM, и обнаруживают, что он не работает.

ИМХО, вам нужно либо использовать полностью предоставленный Appleинструменты или полностью поставляемые GNU инструменты.


Итак, давайте рассмотрим первый вариант - использование инструментов Apple.В этом случае вы компилируете с помощью:

/usr/bin/g++ -g main.cpp -o main

и отлаживаете с помощью:

/usr/bin/lldb ./main

, а команды отладчика кажутся очень похожими на GDB.


Втораяопция использует GCC и GDB, которые обычно лучше всего устанавливать с помощью homebrew .Команды установки:

brew install gcc
brew install gdb

Затем вы скомпилируете что-то вроде:

/usr/local/bin/g++-8 -g main.cpp -o main

и отладите что-то вроде:

/usr/local/bin/gdb ./main

Однако, сейчас я не могу заставить это работать на macOS Mojave!Я прочитал здесь , что GDB v8.1 не работает на macOS, и вам нужно вместо этого установить v8.0.1, но не получается сделать это с homebrew .

...