Сбой GDB с ошибкой "Не удается найти порт задачи Маха для идентификатора процесса"

Мое приложение работает нормально, но GDB не может его отладить со следующей ошибкой

(gdb) run
Starting program: /path/to/app 
Unable to find Mach task port for process-id 83767: (os/kern) failure (0x5).

Я на OS X Lion. Версия GDB

$ gdb --version
GNU gdb 6.3.50-20050815 (Apple version gdb-1752) (Sat Jan 28 03:02:46 UTC 2012)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin".

11 ответов

Решение

В Snow Leopard и более поздних версиях Mac OS недостаточно кодировать gdb исполняемый файл.

Чтобы это работало, вы должны следовать этому руководству: http://www.opensource.apple.com/source/lldb/lldb-69/docs/code-signing.txt

Руководство объясняет, как это сделать для lldb, но процесс точно такой же для gdb,

Это работает, когда я перехожу на sudo gdb executableFileName!:)

Вам необходимо создать сертификат и подписать GDB:

  • Откройте приложение "Keychain Access" (/ Приложения / Утилиты /Keychain Access.app)
  • Откройте меню / Доступ к связке ключей / Ассистент сертификата / Создать сертификат...
  • Выберите имя (в данном примере gdb-cert), задайте для "Identity Type" значение "Self Signed Root", установите для "Type Certificate" значение "Code Signing" и выберите "Let me override default". Нажмите "Продолжить". Возможно, вы захотите продлить заранее установленный период 365 дней до 3650 дней.
  • Нажмите несколько раз на "Продолжить", пока не дойдете до экрана "Укажите местоположение для сертификата", затем установите "Связка ключей для системы".
  • Если вы не можете сохранить сертификат в цепочке ключей "Система", создайте его в цепочке ключей "Логин", а затем экспортируйте его. Затем вы можете импортировать его в "Системную" связку ключей.
  • В брелках выберите "Система", и вы должны найти свой новый сертификат. Используйте контекстное меню для сертификата, выберите "Получить информацию", откройте пункт "Доверие" и установите "Подписывание кода" на "Всегда доверять".
  • Вы должны выйти из приложения "Keychain Access", чтобы использовать сертификат и перезапустить службу "Taskgated", уничтожив текущий запущенный процесс "Taskgated". Или вы можете перезагрузить компьютер.
  • Наконец, вы можете подписать GDB:

    sudo codesign -s gdb-cert /usr/local/bin/ggdb

    sudo ggdb ./myprog

Проблема в том, что вы не вошли в систему как пользователь root (что вам не нужно). Вам нужно создать сертификат для доступа к GDB. Следуйте этому уроку, и у вас все получится...

http://sourceware.org/gdb/wiki/BuildingOnDarwin

Если ничего не помогает, просто используйте: sudo gdb executetableFileName

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

В моем случае мне нужно было иметь ключ в качестве "системного" ключа, иначе он не работал (что упоминается не в каждом URL).

Также убийство taskgated является жизнеспособной (и более быстрой) альтернативой необходимости перезагрузки.

Я также удалил MacPorts до того, как начал этот процесс, и удалил текущий GDB, используя brew uninstall gdb,

Вот действительно полезное руководство, которое решило мою проблему (OSX 10.13.6).

  1. Открытый доступ к связке ключей
  2. В меню откройте Связка ключей> Помощник по сертификации> Создать сертификат.
  3. Дайте ему имя (например, gdbc)
    • Тип удостоверения: самоподписанный корень
    • Тип сертификата: подпись кода
    • Проверить: позвольте мне изменить настройки по умолчанию
  4. Продолжайте до тех пор, пока вам не будет предложено: "укажите место для..."
  5. Установите местоположение Связки ключей в Систему
  6. Создайте сертификат и закройте помощника.
  7. Найдите сертификат в системных связках ключей, щелкните его правой кнопкой мыши> получить информацию (или просто дважды щелкните его)
  8. Разверните "Доверие", установите для подписи кода значение "Всегда доверять".
  9. Перезапустите taskgated в терминале: killall taskgated
  10. Пробег codesign -fs gdbc /usr/local/bin/gdb в терминале: это запрашивает пароль root

Мне нужна была эта команда, чтобы она работала на El Capitan:

sudo security add-trust -d -r trustRoot -p basic -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer

Я следовал этому уроку, и все в порядке.

Эти инструкции работают для OSX High Sierra и избегают запуска gdb от имени пользователя root (чёрт!). Я недавно обновился с OSX 10.13.2 до 10.3.3. Я думаю, что это когда GDB 8.0.1 (установлен w/ homebrew) начал сбой для меня.

У меня были трудности с инструкциями других людей. После разных инструкций все было в беспорядке. Итак, я начал заново. Я более или менее следовал этим инструкциям.

Убери беспорядок:

  1. brew uninstall --force gdb # This deletes _all_ versions of gdb on the machine
  2. В Applications -> Utilities -> Keychain AccessЯ удалил все предыдущие сертификаты и ключи GDB (убедитесь, что вы знаете, что вы делаете здесь!). Неясно, нужно ли это, но, поскольку я пытался создать эти сертификаты и ключи, используя другие инструкции, я все равно их удалил. У меня были ключи и сертификаты как в логине, так и в системе.

Теперь переустановите GDB.

  1. brew install gdb
  2. В Keychain Access, зайдите в меню Keychain Access-> Certificate Assistant -> Create a Certificate
  3. Установите флажок "Разрешить отмену настроек по умолчанию" и установите
Name : gdb-cert
Identity Type: Self Signed Root
Certificate Type : Code Signing

[X] Let me override defaults
  1. На первой странице информации о сертификате:
Serial Number : 1
Validity Period (days): 3650
  1. На 2-й странице информации о сертификате я оставил все поля пустыми, кроме уже заполненных.

  2. На странице информации о паре ключей я оставил значения по умолчанию

Key Size : 2048
Algorithm : RSA
  1. На странице "Расширение использования ключа" я оставил флажки по умолчанию.
[X] Include Key Usage Extension
[X] This extension is critical
Capabilities:
[X] Signature
  1. На странице Extended Key Usage Extension я оставил флажки по умолчанию.
[X] Include Extended Key Usage Extension
[X] This extension is critical
Capabilities:
[X] Code Signing
  1. На странице расширения основных ограничений ничего не проверялось (по умолчанию).

  2. На странице Расширения дополнительного имени субъекта я оставил флажок по умолчанию и больше ничего не добавил.

[X] Include Subject Alternate Name Extension
  1. На странице "Указать местоположение для сертификата" я установил
Keychain: System
  1. Я нажал "Создать" и получил запрос на ввод пароля.

  2. Вернуться в Keychain Access приложение, я пошел в System и щелкните правой кнопкой мыши на gdb-cert и в раскрывающемся меню TrustЯ изменил все поля на Always Trust,

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

  4. На терминале я побежал codesign -s gdb-cert /usr/local/bin/gdb, Я ввел свой пароль, когда будет предложено.

  5. На терминале я побежал echo "set startup-with-shell off" >> ~/.gdbinit

  6. Я побежал gdb myprogram а потом start в консоли GDB. Здесь, я полагаю, мне предложили ввести пароль. После этого все последующие запуски не запрашивали мой пароль.

На MacOSX lldb должен быть подписан кодом. Для сборок Debug и Release устанавливается подпись кода с использованием сертификата подписи кода с именем lldb_codesign.

If you don't have one yet you will need to:
- Launch /Applications/Utilities/Keychain Access.app

- In Keychain Access select the "login" keychain in the "Keychains"
  list in the upper left hand corner of the window.

- Select the following menu item:

    Keychain Access->Certificate Assistant->Create a Certificate...

- Set the following settings

    Name = lldb_codesign
    Identity Type = Self Signed Root
    Certificate Type = Code Signing

- Click Continue
- Click Continue
- Click Done
- Click on the "My Certificates"
- Double click on your new lldb_codesign certificate
- Turn down the "Trust" disclosure triangle

    Change:
        When using this certificate: Always Trust

- Enter your login password to confirm and make it trusted

The next steps are necessary on SnowLeopard, but are probably because of a bug
how Keychain Access makes certificates.

- Option-drag the new lldb_codesign certificate from the login keychain to
  the System keychain in the Keychains pane of the main Keychain Access window
  to make a copy of this certificate in the System keychain.  You'll have to
  authorize a few more times, set it to be "Always trusted" when asked.
- Switch to the System keychain, and drag the copy of lldb_codesign you just
  made there onto the desktop.
- Switch to Terminal, and run the following:

sudo security add-trust -d -r trustRoot -p basic -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/lldb_codesign.cer

- Right click on the "lldb_codesign" certificate in the "System" keychain (NOT
  "login", but the one in "System"), and select "Delete" to delete it from
  the "System" keychain.
- Reboot
- Clean and rebuild lldb and you should be able to debug.

That should do it.

[Примечание: - lldb используется в mac как gdb.]

Это странный подход, но он сработал для меня (MacOs HighSierra 10.13.3). Установите CLion. Это идет с GDB. После запуска GDB с помощью терминала. Скопируйте программу GDB в ваш usr/local/bin/. Нет проблем входа, судо и т. Д.

Следуя приведенным здесь инструкциям, Codesign gdb в macOS, по- видимому, решил эту проблему для меня в macOS High Sierra (10.13.3).

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