«Пожалуйста, проверьте, что gdb имеет кодовую подпись - см. Taskgated (8)» - Как установить gdb с подписью кода homebrew?

Я нахожусь под osx 10.8.4 и установил gdb 7.5.1 с homebrew (мотивация получить новый gdb с новыми функциями, такими как --with-python и т. д.)

Короче говоря, когда я запускаю отладку в проекте C ++ Eclipse, я получаю:

Error in final launch sequence
Failed to execute MI command:
-exec-run
Error message from debugger back end:
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))

Я следовал различным предложениям для подписи кода

Так я и сделал:

  1. Настройте сертификат
  2. Подпишите gdb -> кодовое обозначение -s gdb-cert /usr /local /bin /gdb

Когда я снова запускаю отладку в Eclipse, я получаю ту же ошибку, что и выше "(пожалуйста, проверьте, что gdb имеет кодовое обозначение - см. taskgated (8))".

Если я верну GDB к более старому GDB (в настройках GDB в Eclipse) /usr /libexec /gdb /gdb-i386-apple-darwin, отладка будет выполняться, как и ожидалось.

Есть какие-нибудь решения /подсказки?

Thx

Пелле

74 голоса | спросил pellekrogholt 25 AM00000010000003431 2013, 01:07:34

7 ответов


0

Эта ошибка возникает из-за того, что OSX реализует политику доступа pid, которая требует, чтобы двоичные файлы имели цифровую подпись для доступа к другим pid-процессам. Чтобы разрешить доступ gdb к другим процессам, мы должны сначала подписать код двоичным кодом. Эта подпись зависит от конкретного сертификата, который пользователь должен создать и зарегистрировать в системе.

Чтобы создать сертификат подписи кода, откройте приложение Keychain Access. Выберите меню Доступ к цепочке для ключей -> Помощник по сертификации -> Создать сертификат ...

Выберите имя для сертификата (например, gdb-cert), установите для параметра «Тип идентификации» значение «Самоподписанный корень», для параметра «Тип сертификата» выберите «Подписание кода» и выберите значения по умолчанию «Разрешить переопределение». Нажмите несколько раз на кнопку «Продолжить», пока не перейдете к экрану «Указать местоположение для сертификата», затем установите для «Связки ключей» значение «Система».

Дважды щелкните сертификат, откройте раздел «Доверие» и установите для параметра «Подписывание кода» значение «Всегда доверять». Выход из приложения Keychain Access.

Перезапустите службу с заданием и подпишите двоичный файл.

$ sudo killall taskgated
$ codesign -fs gdb-cert "$(which gdb)"

source http://andresabino.com/2015/04/14/codesign-gdb-on-mac-os-x-yosemite-10-10-2/

В macOS 10.12 (Sierra) и более поздних версиях вы также должны

Используйте GDB 7.12.1 или новее Кроме того, запретите GDB использовать оболочку для запуска отлаживаемой программы. Вы можете использовать следующую команду для этого внутри GDB:

set startup-with-shell off

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

echo "set startup-with-shell off" >> ~/.gdbinit

ИСТОЧНИК: https://sourceware.org/gdb/wiki/BuildingOnDarwin

ответил maximser 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 23 Sep 2015 00:14:47 +0300 2015, 00:14:47
0

Я заставил gdb работать на OSX 10.9, не используя кодировку таким образом (описано здесь ):

  1. Установите gdb с macports. (может быть, вы можете пропустить это)

  2.   

    sudo nano /System/Library/LaunchDaemons/com.apple.taskgated.plist

    измените строку параметра с -s на -sp в строке 22, столбец 27.

  3. перезагрузите компьютер.

  4. Используйте GDB. Если вы установили его с портами Mac, вы должны использовать команду «ggdb». Или сделал псевдоним в вашем конфигурационном файле:

  

псевдоним gdb = 'ggdb'

и используйте команду 'gdb'.

ответил klm123 18 12013vEurope/Moscow11bEurope/MoscowMon, 18 Nov 2013 16:55:30 +0400 2013, 16:55:30
0

У меня возникла та же проблема с GDB. Я работаю под Mac OS X 10.8.5 aka Mountain Lion. Я использую версию GDB 7.7.1.

Я скомпилировал мою тестовую программу с помощью следующей команды:

g++ -o gdb-sample.out -g gdb-sample.cpp    

Если я ввел команду gdb sample.out, я получу такое же зашифрованное сообщение об ошибке:

"Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5). (please check gdb is codesigned - see taskgated(8))"

Однако это сообщение об ошибке - красная сельдь.

Решение, которое я нашел, которое сработало для меня, состояло в том, чтобы просто вызвать GDB с помощью суперпользователя acct:

sudo gdb sample.out. 

Это прекрасно работает для меня.

И с этого момента я мог запускать GDB example.out без использования sudo.

Надеюсь, что это помогает и работает для других. RSVP, если это не так.

ответил mickster99 18 Jam1000000amSun, 18 Jan 2015 03:05:50 +030015 2015, 03:05:50
0

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

  1. Создайте сертификат для подписи GDB.

К сожалению, системный сертификат дал мне Unknown Error = -2,147,414,007, что очень помогло, поэтому мне пришлось искать обходной путь.   KeyChain Assistant -> Create certificate ->

Выберите login, gdb-cert, Code Signing

Копирование /перемещение сертификата в системную цепочку ключей (введите пароль)

  1. Выберите сертификат (gdb-cert) и нажмите Get info -> Trust Always
  2. Отключить startup-with-shell

Введите в консоли: set startup-with-shell off

Запомните конфигурацию: echo "set startup-with-shell off" >> ~/. gdbinit

  1. Включить Root User

Перейдите в System Preferences -> Users & Groups -> Unlock it -> Login Options -> Network Account Server -> Join -> Unlock it -> Edit (меню) -> Enable Root User

    sudo killall taskgated литий>
  1. Наконец, подпишите GDB

codesign -fs gdb-cert "$(which gdb)"

  1. Отключить root-пользователя (шаг 4)
  2. Перезагрузите компьютер, если он все еще не работает. (если ничего не работает, скорее всего, это уже работает)

PS. В итоге я использую lldb, потому что он просто работает ( учебное пособие )

ответил Taras Matsyk 9 FebruaryEurope/MoscowbFri, 09 Feb 2018 13:23:12 +0300000000pmFri, 09 Feb 2018 13:23:12 +030018 2018, 13:23:12
0

Интересно, имеет ли глобальное изменение ответ с наибольшим количеством голосов здесь непредвиденные последствия.

Вместо включения старого соглашения Tiger, Taskgated позволяет запускать подписанный код. Поэтому может быть лучше просто получить подписанный сертификат для gdb, аналогично ответу здесь .

После этого я смог sudo использовать gdb. Если вам нужно использовать gdb без sudo, то, возможно, эта ссылка поможет , однако, отказ от ответственности, я еще не пробовал, потому что использование sudo является хорошим решением для now`.

ответил JnBrymn 26 FriEurope/Moscow2014-12-26T22:29:21+03:00Europe/Moscow12bEurope/MoscowFri, 26 Dec 2014 22:29:21 +0300 2014, 22:29:21
0

Для тех, кто использует Sierra 10.12.6 (и выше) и Homebrew, /usr/local/bin/gdb является символической ссылкой на /usr/local/Cellar/gdb/8.0/bin/gdb (или любой другой версии, например 8.0.1).

Вам необходимо кодировать как ссылку, так и цель:

codesign -fs gdb-cert /usr/local/bin/gdb
codesign -fs gdb-cert "/usr/local/Cellar/gdb/8.0/bin/gdb"

Или, если у вас есть greadlink (устанавливается через brew install coreutils):

codesign -fs gdb-cert $(which gdb)
codesign -fs gdb-cert $(greadlink -f $(which gdb))
ответил Larry Song 31 AM00000080000002531 2017, 08:12:25
0

Это может быть не связано. Вы можете использовать lldb на macos вместо gdb. Вам не нужно это хлопот, чтобы установить GDB.

lldb ( http://lldb.llvm.org ) по умолчанию уже установлен в High Sierra

ответил Kaituo Li 8 J000000Sunday18 2018, 09:08:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132