Подтвердить что ты не робот

Тип GDB не работает на macOS Sierra

Это проблема, которая появилась, когда я впервые обновился до macOS Sierra вчера.

Сам GDB работает нормально. Однако каким-то образом он не может запустить мою программу. Когда я набираю "run" и 'enter', он сразу же падает с информацией: During startup program terminated with signal SIG113, Real-time event 113.

Мой GDB основан на доморощенных. Поэтому сегодня я удалил весь пакет homebrew и переустановил его. После этапа codeign я по-прежнему сталкивался с той же ошибкой.

Я попробовал "судо" и еще несколько вещей. Google понятия не имел, что произошло. Поэтому мне было интересно, есть ли у вас ребята какое-нибудь магическое решение.

4b9b3361

Ответ 1

Вот как я легко исправил проблему. [Обновление: на основе полученной обратной связи и еще не подтвержденного, похоже, что это решение работает с macOS Sierra 10.12, но не с macOS Sierra 10.12.2]

Смотрите инструкции видео здесь

  • Выход из gdb
  • Использование текстового редактора, например. Sublime Text, сохраните файл с именем ".gdbinit" [Исключить кавычки] в вашей папке пользователя.
  • В файле добавьте следующее: "set startup-with-shell off" [Исключить кавычки]
  • Сохранить файл
  • gdb теперь должен работать

Источники

https://discussions.apple.com/thread/7684629?start=0&tstart=0

Где находится .gdbinit и как его изменить?

https://sourceware.org/gdb/onlinedocs/gdb/Starting.html

Ответ 2

Я получил ту же ошибку после обновления до macOS Sierra. Временно я сменил отладчик на LLDB, используя библиотеку lldbmi2:
1. git clone https://github.com/freedib/lldbmi2.git lldbmi2
2. cd lldbmi2
3. mkdir build
4. cd build
5. cmake ../
6. make
7. sudo make install

После установки lldbmi2 вы можете отлаживать свое приложение, создав новое приложение C/С++ в конфигурациях отладки... и измените отладчик GDB (на вкладке Debugger) с gdb на lldbmi2. Там могут быть установлены параметры lldbmi2. Что-то вроде /usr/local/bin/lldbmi 2 --log.

введите описание изображения здесь

Кажется, что все работает нормально, и даже лучше, чем GDB.

Ответ 3

Это связано с функцией защиты целостности Runtime в Sierra - вы можете деактивировать ее, следуя инструкциям здесь.

  • Перезагрузите вашу систему. Держите команду + R нажатой до тех пор, пока логотип Apple появляется на экране.
  • Выберите меню Утилиты/Тип терминала "csrutil enable --woutout debug" в терминале
  • Наконец, перезагрузите компьютер снова.

Обратите внимание, что отключение этого приведет к снижению безопасности вашей системы, поэтому выполнение вышеуказанного действительно должно быть вашим решением.

Еще одно влияние этого изменения заключается в том, что переменная DYLD_LIBRARY_PATH уже не reset при возникновении новых процессов через оболочку. Эта переменная используется динамическим компоновщиком для поиска динамических библиотек. Это имеет приоритет над маршрутом поиска, закодированным в исполняемых файлах, OS считается небезопасной. В результате, macOS по умолчанию unsets переменная, так что исполняемый файл, который вы создаете, использует свои собственные библиотеки. Вместо этого мы рекомендуем использовать DYLD_FALLBACK_LIBRARY_PATH. после пути поиска библиотеки приложений, в случае, если некоторые библиотеки все еще не найдены.

Ответ 4

Несколько решений, которые работали в Sierra 10.12.0, не работают с Sierra 10.12.1. В этой версии вам понадобится обновленная версия GDB (исправленная в FSF 9 ноября), в дополнение к отключению нереста оболочки с "set startup-with-shell off". См. Инструкции в http://blog.adacore.com/gnat-on-macos-sierra

Ответ 5

У меня было несколько проблем с Sierra.

Для начала мой код, который работал над предыдущими версиями OSX, прекратил работу на этой версии. Кроме того, он не будет компилироваться. Кроме того, GDB от brew является полным беспорядком. Чтобы добавить, что другие сторонние библиотеки были повреждены (например, libevent).

( "Хорошая работа" Apple).

После "обновления" до Sierra я предлагаю следующие шаги для работы GDB:

  • Установите новый gcc (требуется около 60 минут - в зависимости от вашего процессора и т.д.)

    brew установить gcc

  • Загрузите исходный код GDB

  • Так как gcc и g++ являются псевдонимами старых gcc и g++, обязательно привяжите их к новым gcc и g++, например:

    export CC = `which gcc-6`

    export CXX = `which gxx-6`

  • Настроить и скомпилировать gdb:

    ./Configure

    make CFLAGS = -Wno-error = устаревшие-объявления CXXFLAGS = -Wno-error = устаревшие-декларации

    sudo make install

Ответ 6

предположим, что ваша версия MacOS - 10.12.6.

  • обновите свой gdb до версии 8.0.1 brew upgrade gdb
  • выполнить echo "set startup-with-shell off" >> ~/.gdbinit (я видел эту команду, когда я установил gdb на brew)
  • создать сертификат с именем gdb-cert и доверять этому сертификату в опции подписи кода
  • перезагрузите ваш Mac
  • выполнить sudo codesign -s gdb-cert /usr/local/bin/gdb
  • сделано! веселиться ~

Кстати, вы можете использовать lldb для замены gdb.