Gdb не работает на macos High Sierra 10.13.3

Я установил gdb 8.1 с brew.

У меня также есть codeign 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?

Ответ 1

Это вызвано последней версией 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

Ответ 2

в моем случае снижение до 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. Создайте gdb, используя ваш сертификат: codesign -fs gdb-cert/usr/local/bin/gdb
  12. --- ПРОВЕРИТЬ, ЕСЛИ ЭТО РАБОТАЕТ ---
  13. Выключите ваш Mac и перезапустите в режиме восстановления (удерживайте нажатой command-R пока не появится логотип Apple)
  14. Открыть окно терминала
  15. Измените защиту целостности системы, чтобы разрешить отладку: отладка csrutil enable --without debug
  16. Перезагрузите свой Mac
  17. Отладка с помощью gdb теперь должна работать как положено.

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

Ответ 3

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

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

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