Я использую 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))
Я следил за различными предложениями по подписи кода
- https://sourceware.org/gdb/wiki/BuildingOnDarwin
- частично http://www.noktec.be/archives/1251 с различными настройками
Так я и сделал:
- Настроить сертификат
- Подпишите gdb -> codeign -s gdb-cert / usr / local / bin / gdb
Когда я повторно запускаю отладку в Eclipse, я получаю ту же ошибку, что и выше «(проверьте, что gdb имеет кодовую подпись - см. Taskgated (8))».
Если я верну gdb к старому gdb (в настройках gdb Eclipse) / usr / libexec / gdb / gdb-i386-apple-darwin, отладка будет выполняться должным образом.
Есть какие-нибудь решения / подсказки?
Спасибо
Пелле
Ответы:
Эта ошибка возникает из-за того, что OSX реализует политику доступа pid, которая требует цифровой подписи для двоичных файлов для доступа к pid других процессов. Чтобы разрешить GDB доступ к другим процессам, мы должны сначала подписать двоичный код. Эта подпись зависит от конкретного сертификата, который пользователь должен создать и зарегистрировать в системе.
Чтобы создать сертификат подписи кода, откройте приложение Связка ключей. Выберите меню «Связка ключей» -> «Помощник по сертификации» -> «Создать сертификат…»
Выберите имя для сертификата (например, gdb-cert), установите для параметра «Тип удостоверения» значение «Самоподписанный корень», для параметра «Тип сертификата» выберите «Подписание кода» и выберите «Разрешить отмену значений по умолчанию». Нажмите несколько раз на «Продолжить», пока не дойдете до экрана «Укажите расположение для сертификата», затем установите «Связка ключей» на «Система».
Дважды щелкните сертификат, откройте раздел «Доверие» и установите для параметра «Подписывание кода» значение «Всегда доверять». Закройте приложение Keychain Access.
Перезапустите службу Taskgated и подпишите двоичный файл.
источник 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:
Вы также можете поместить эту последнюю команду в файл с именем .gdbinit в вашем домашнем каталоге, и в этом случае она будет применяться автоматически каждый раз, когда вы запускаете gdb.
ИСТОЧНИК: https://sourceware.org/gdb/wiki/BuildingOnDarwin
источник
macOS Sierra
с самоподписанными сертификатами.sudo killall taskgated
- ключ к решению моей проблемыЯ заставил gdb работать на OSX 10.9 без кодирования таким способом (описанным здесь ):
Установите gdb с помощью macports. (может быть, вы можете пропустить это)
sudo nano /System/Library/LaunchDaemons/com.apple.taskgated.plist
изменить вариант строки из
-s
к-sp
в строке 22, собр 27.Перезагрузите компьютер.
Используйте gdb. Если вы установили его с портами Mac, вы должны использовать
ggdb
команду. Или сделал псевдоним в вашем файле конфигурации:alias gdb='ggdb'
и затем используйте команду 'gdb'.
источник
gdb
какsudo
. Это похоже на ненужную угрозу безопасности.Я обновился до
gdb 8.3
и не смог заставить все работать. Мне это помогло:Где содержание
gdb.xml
:Я нашел это решение здесь: https://timnash.co.uk/getting-gdb-to-semi-reliably-work-on-mojave-macos/
Примечание. Без разрешения я мог работать
gdb
только сsudo
.источник
error: The specified item could not be found in the keychain.
У меня была такая же проблема с GDB. Я бегаю под
Mac OS X 10.8.5
именем Mountain Lion. Я использую версию GDB7.7.1
.Я скомпилировал свою тестовую программу с помощью следующей команды:
Если я ввел команду
gdb sample.out
, то получаю такое же загадочное сообщение об ошибке:Однако это сообщение об ошибке - отвлекающий маневр.
Решение, которое я нашел, сработало для меня, состояло в том, чтобы просто вызвать GDB с помощью суперпользователя acct:
Мне это подходит.
И с этого момента я мог запускать GDB example.out без использования sudo.
Надеюсь, это поможет и сработает для других. RSVP, если это не так.
источник
У меня ничего из этого не сработало, и мне пришлось долго пробегать. Вот полный список шагов, которые я сделал, чтобы заставить его работать.
К сожалению, системный сертификат дал мне
Unknown Error = -2,147,414,007
очень полезный результат, поэтому пришлось искать обходной путь.KeyChain Assistant -> Create certificate ->
Выберите
login
,gdb-cert
,Code Signing
Скопируйте / переместите сертификат в Системную связку ключей (введите пароль)
gdb-cert
) нажмитеGet info
->Trust Always
startup-with-shell
Введите в консоль:
set startup-with-shell off
Помните конфигурацию:
echo "set startup-with-shell off" >> ~/. gdbinit
Перейдите в
System Preferences
->Users & Groups
->Unlock it
->Login Options
->Network Account Server
->Join
->Unlock it
->Edit
(меню) ->Enable Root User
sudo killall taskgated
codesign -fs gdb-cert "$(which gdb)"
PS. Я использую,
lldb
потому что он просто работает ( учебник )источник
Для всех, кто использует Sierra 10.12.6 (и выше) и Homebrew,
/usr/local/bin/gdb
это символическая ссылка на/usr/local/Cellar/gdb/8.0/bin/gdb
(или любую другую версию, например8.0.1
).Вам нужно кодировать как ссылку, так и цель:
Или, если вы установили
greadlink
(черезbrew install coreutils
):источник
Интересно, имеет ли глобальное изменение в ответе, получившем наибольшее количество голосов , некоторые непредвиденные последствия.
Вместо того, чтобы использовать старое соглашение Tiger, Taskgated разрешает запуск подписанного кода. Так что может быть лучше просто получить подписанный сертификат для gdb, аналогичный ответу здесь .
После этого я смог
sudo
использовать gdb. Если вам нужно использовать gdb без sudo, то, возможно, эта ссылка поможет, хотя, отказ от ответственности, я еще не пробовал, потому что использованиеsudo
- это нормальное решение на данный момент.источник
Это не может быть связано. Вы можете использовать lldb в macos вместо gdb. Вам не нужны эти хлопоты для установки gdb.
lldb ( http://lldb.llvm.org ) уже установлен по умолчанию в High Sierra
источник
Я могу порекомендовать следовать этой сути: https://gist.github.com/gravitylow/fb595186ce6068537a6e9da6d8b5b96d#file-codesign_gdb-md
С хитростью, которую нужно преодолеть:
unknown error = -2,147,414,007
во время создания сертификата, описанного здесь: https://apple.stackexchange.com/a/309123Ноты:
Путь для gdb, установленного как
homebrew
пакет, должен быть примерно таким:/usr/local/Cellar/gdb/9.2/bin/gdb
И
csrutil enable --without debug
вызовет сообщениеrequesting unsupported configuration
, как здесь: https://totalfinder.binaryage.com/system-integrity-protectionТест:
источник
gdb 8.3;
Моя проблема такая же, как у парня выше, решена
источник