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:
Ответ 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) начал сбой для меня.
У меня были трудности с инструкциями других людей. После разных инструкций все было в беспорядке. Итак, я начал заново. Я более или менее следовал этим инструкциям.
Убери беспорядок:
-
brew uninstall --force gdb # This deletes _all_ versions of gdb on the machine
- В
Applications
→ Utilities
→ Keychain Access
я удалил все предыдущие сертификаты и ключи GDB (убедитесь, что вы знаете, что делаете здесь!). Неясно, нужно ли это, но, поскольку я пытался создать эти сертификаты и ключи, используя другие инструкции, я все равно их удалил. У меня были ключи и сертификаты как в логине, так и в системе.
Теперь переустановите GDB.
-
brew install gdb
- В
Keychain Access
перейдите в меню Keychain Access
→ Certificate Assistant
→ Create a Certificate
- Установите флажок "Разрешить отмену настроек по умолчанию" и установите
Name : gdb-cert
Identity Type: Self Signed Root
Certificate Type : Code Signing
[X] Let me override defaults
- На первой странице информации о сертификате:
Serial Number : 1
Validity Period (days): 3650
-
На 2-й странице информации о сертификате я оставил все поля пустыми, кроме уже заполненных.
-
На странице информации о паре ключей я оставил значения по умолчанию
Key Size : 2048
Algorithm : RSA
- На странице "Расширение использования ключа" я оставил флажки по умолчанию.
[X] Include Key Usage Extension
[X] This extension is critical
Capabilities:
[X] Signature
- На странице Расширение расширенного использования ключа я оставил флажки по умолчанию.
[X] Include Extended Key Usage Extension
[X] This extension is critical
Capabilities:
[X] Code Signing
-
На странице расширения основных ограничений ничего не проверялось (по умолчанию).
-
На странице Расширения альтернативного имени субъекта я оставил флажок по умолчанию и больше ничего не добавил.
[X] Include Subject Alternate Name Extension
- На странице Укажите местоположение для сертификата я установил
Keychain: System
-
Я нажал "Создать" и получил запрос на ввод пароля.
-
Вернувшись в приложение Keychain Access
, я зашел в System
и щелкнул правой кнопкой мыши на gdb-cert
и в раскрывающемся меню Trust
изменил все поля на Always Trust
.
-
Перезагрузил компьютер.
-
В Терминале я запустил codesign -s gdb-cert/usr/local/bin/gdb
. Я ввел свой пароль, когда будет предложено.
-
В Терминале я запустил echo "set startup-with-shell off" >> ~/.gdbinit
-
Я запустил 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).
- Открытый доступ к брелку
- В меню откройте Keychain Access> Certificate Assistant> Создать сертификат
- Дайте ему имя (например, gdbc)
- Тип удостоверения: самоподписанный корень
- Тип сертификата: Кодовая подпись
- Проверьте: позвольте мне переопределить значения по умолчанию
- Продолжайте до тех пор, пока не появится запрос: "укажите местоположение для..."
- Установить расположение цепочки для ключей в систему
- Создайте сертификат и закройте помощника.
- Найдите сертификат в системных цепочках ключей, щелкните его правой кнопкой мыши> получите информацию (или просто дважды щелкните его)
- Разверните Доверие, установите подпись кода, чтобы всегда доверять
- Перезапустить задачу в терминале: killall Taskgated
- Запустите
codesign -fs gdbc/usr/local/bin/gdb
в терминале: запрашивается пароль root