Gdb не работает с ошибкой "Не удалось найти Mach task port for process-id"

Мое приложение работает нормально, но 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".

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

Вам нужно создать сертификат и подписать gdb:

  • Откройте приложение "Доступ к ключам" (/Приложения/Утилиты/Keychain Access.app)
  • Открыть меню/Доступ к ключам/Помощник по сертификату/Создать сертификат...
  • Выберите имя (gdb-cert в примере), установите "Тип идентификации" в "Self Signed Root", установите "Тип сертификата" на "Подпись кода" и выберите "Позвольте мне переопределить значения по умолчанию". Нажмите "Продолжить". Возможно, вы захотите продлить предопределенный 365 дней до 3650 дней.
  • Нажмите несколько раз на "Продолжить", пока не дойдете до экрана "Укажите местоположение для сертификата", затем установите "Брелок для системы".
  • Если вы не можете сохранить сертификат в цепочке ключей "Система" , создайте его в цепочке ключей "login", а затем экспортируйте его. Затем вы можете импортировать его в цепочку ключей "Система" .
  • В цепочках ключей выберите "Система" , и вы должны найти новый сертификат. Используйте контекстное меню для сертификата, выберите "Получить информацию", откройте пункт "Доверие" и установите "Подпись кодов" на "Всегда доверять".
  • Вы должны выйти из приложения "Keychain Access", чтобы использовать сертификат и перезапустить "порученную" службу, убив текущий выполняемый процесс "taskgated". Кроме того, вы можете перезагрузить компьютер.
  • Наконец, вы можете подписать gdb:

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

    sudo ggdb ./myprog

Ответ 4

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

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

Если все остальное не работает, просто используйте: sudo gdb executableFileName

Ответ 5

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

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

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

Я также удалил MacPorts, прежде чем начал этот процесс, и удалил текущий gdb с помощью brew uninstall gdb.

Ответ 6

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

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

Ответ 7

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

Ответ 8

В 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.]

Ответ 9

Эти инструкции работают для 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. В ApplicationsUtilitiesKeychain Access я удалил все предыдущие сертификаты и ключи GDB (убедитесь, что вы знаете, что делаете здесь!). Неясно, нужно ли это, но, поскольку я пытался создать эти сертификаты и ключи, используя другие инструкции, я все равно их удалил. У меня были ключи и сертификаты как в логине, так и в системе.

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

  1. brew install gdb
  2. В Keychain Access перейдите в меню Keychain AccessCertificate AssistantCreate 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. На странице Расширение расширенного использования ключа я оставил флажки по умолчанию.
[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. Здесь, я полагаю, мне предложили ввести мой пароль. После этого при всех последующих запусках он не запрашивал мой пароль.

Ответ 10

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

Ответ 11

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

Ответ 12

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

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