GDB не работает на MacOS High Sierra 10.13.3

Я установил GDB 8.1 с Brew.

У меня есть кодовый знак GDB также и.gdbinit, как показано ниже:

set startup-with-shell off,

Я отключил функцию SIP:

$ csrutil status
System Integrity Protection status: disabled.

Но GDB по-прежнему не работает:

#include <iostream>
using namespace std;

int main() {
  cout << "hello world!" << endl;
  return 0;
}

Команда компиляции:

g++ -g test.cpp

Вывод GDB:

GNU gdb (GDB) 8.1
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-darwin17.3.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"...
Reading symbols from a.out...Reading symbols from /Users/mypc/Downloads/a.out.dSYM/Contents/Resources/DWARF/a.out...done.
done.
(gdb) run
Starting program: /Users/mypc/Downloads/a.out 
[New Thread 0x2503 of process 802]
[New Thread 0x2303 of process 802]
During startup program terminated with signal ?, Unknown signal.
(gdb) 

Какие правильные шаги, чтобы заставить GDB работать на Macos Sierra?

2 ответа

Решение

Это вызвано последней версией GDB 8.1, снижение версии GDB до 8.0.1 может решить эту проблему.

Как перейти на GDB 8.0.1

  • Отключить текущий GDB: brew unlink gdb
  • Установите GDB 8.0.1: brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/9ec9fb27a33698fc7636afce5c1c16787e9ce3f3/Formula/gdb.rb
  • Необязательно: избегайте обновления GDB с помощью brew pin gdb

В моем случае снижение до 8.0.1 не помогло.
но помогли следующие шаги.

(Я вставил шаг 12, "проверьте, работает ли он", потому что вместо перезапуска я протестировал GDB, и он работал просто отлично. Я не выполнил шаги 12+)


  1. Открытый доступ к брелку
  2. В меню откройте Keychain Access> Certificate Assistant > Создать сертификат
  3. Дайте ему имя (например, gdb-cert)
    • Тип удостоверения: самоподписанный корень
    • Тип сертификата: Кодовая подпись
    • Проверьте: позвольте мне переопределить значения по умолчанию
  4. Продолжайте, пока "не укажите место для..."
  5. Установите расположение цепочки для ключей в систему
  6. Создайте сертификат и закройте Certificate Assistant.
  7. Найти сертификат в системной связке ключей.
  8. Дважды щелкните сертификат
  9. Разверните Доверие, установите подпись кода, чтобы всегда доверять
  10. Перезапустите задачу в терминале: killall taskgated
  11. Codesign GDB, используя ваш сертификат: codesign -fs gdb-cert /usr/local/bin/gdb
  12. --- ПРОВЕРИТЬ, ЕСЛИ ЭТО РАБОТАЕТ ---
  13. Выключите ваш Mac и перезапустите в режиме восстановления (удерживайте нажатой command-Rпока не появится логотип яблока)
  14. Открыть окно терминала
  15. Измените защиту целостности системы, чтобы разрешить отладку: csrutil enable --without debug
  16. Перезагрузите свой Mac
  17. Отладка с помощью gdb теперь должна работать как положено.

Информационный ресурс:
Предварительно Сьерра: https://gist.github.com/hlissner/898b7dfc0a3b63824a70e15cd0180154
Сьерра: https://gist.github.com/gravitylow/fb595186ce6068537a6e9da6d8b5b96d

Я использую macOS 10.13.6, и у меня возникла та же проблема, что " (пожалуйста, проверьте, что gdb имеет кодовое обозначение - см. Taskgated(8))" ...

Когда я понизил GDB с 8.2.1 до 8.0.1, а затем снова создал и подписал gdb-cert, он просто заработал...

Не забудьте изменить путь к gdb с 8.2.1 на 8.0.1 в отладчике eclipse, перезапустите, и он заработает.

Другие вопросы по тегам