Отладка в XCode от имени root - PullRequest
25 голосов
/ 23 июня 2009

В моей программе мне нужно создать сокеты и связать их с прослушиванием порта HTTP (80). Программа работает нормально, когда я запускаю ее из командной строки с помощью sudo, увеличивая разрешения для пользователя root. Запуск под XCode выдает ошибку «отказано в разрешении» при вызове функции привязки (asio :: ip :: tcp :: acceptor :: bind ()).

Как мне выполнить отладку в XCode?

Все сделано на C ++ и boost.asio на Mac OS X 10.5 с XCode 3.1.2.

Ответы [ 6 ]

23 голосов
/ 23 июня 2009

Обновление : для Xcode 4.5 и более поздних версий см. этот ответ вместо.


Единственный способ сделать то, о чем вы просите, - запустить Xcode от имени root.

>> sudo /Developer/Applications/Xcode.app/Contents/MacOS/Xcode

После запуска с правами root все процессы, запущенные из Xcode, также будут выполняться с правами root. Однако обратите внимание, что если вы создаете или редактируете какие-либо файлы, они будут принадлежать пользователю root, а это значит, что вам придется chown их, прежде чем вы сможете редактировать их как обычный пользователь.

Мне бы хотелось, чтобы Xcode сказал «Запустить процесс как root», но, насколько я знаю, такая функциональность недоступна.

Обратите внимание, что вы также можете запустить приложение в отладчике командной строки gdb для отладки приложения. Выполнить

>> sudo gdb /path/to/my/application

Тогда вы можете оставить Xcode открытым, изменить по своему желанию и отладить вашу программу в gdb. Это то, что я обычно делаю.

РЕДАКТИРОВАТЬ : читатели из будущего: см. Ответ Александра Ставонина; это говорит о том, как это сделать. Если у вас все в порядке с ключами ssh и включением пользователя root в вашей системе, его ответ - путь.

22 голосов
/ 28 декабря 2012

В Xcode 4.5 Продукт -> Редактировать схему : найдите вкладку Информация в Процесс отладки как и выберите root опция.

13 голосов
/ 08 декабря 2009

Xcode может запускать приложение отладки от имени пользователя root. Для этого необходимо выполнить следующие шаги:

  1. Включить пользователя root для локальной машины.

    а. Запустите утилиту каталогов (/ System / Library / CoreServices / Directory Utility.app)

    б. Выберите «Включить пользователя root» в меню «Правка» и введите пароль root.

  2. Включить удаленную регистрацию.

    а. В Системных настройках ... -> Общий доступ, проверьте Удаленный вход. Эта опция включает демона ssh.

  3. Создание открытых / закрытых ключей ssh ​​и копирование открытого ключа в папку .ssh / authorized_keys для пользователя root.

    а. Откройте терминал на локальной машине и наберите ssh-keygen -t rsa

    б. Примите местоположение по умолчанию и введите пароль для root.

    с. Войдите в систему как root su - и создайте каталог ~ / .ssh. (~ == / var / root)

    * * Д тысячу двадцать восемь. Скопируйте открытый ключ в корень: cat ~/.ssh/id_rsa.pub | ssh root@localhost "cat - >> ~/.ssh/authorized_keys"

    е. Проверьте, все ли в порядке. Введите ssh root@localhost. Он не должен запрашивать пароль root.

  4. Включить удаленную отладку через ssh в Xcode.

    а. Выберите «Get Info» из выпадающего меню «Executables».

    б. В настройках «Отладка» отметьте «Отладка удаленно исполняемого файла через ssh» и укажите root @ localhost в качестве информации «Connect to».

  5. Теперь все должно быть в порядке ☺

Из блога

2 голосов
/ 02 октября 2012

XCode больше не поддерживает удаленную отладку, рендеринг большинства из этих ответов устарел.

Теперь для отладки программы от имени root это просто. В меню «Продукт» используйте «Редактировать схему…», а на панели «Информация» о схемах «Выполнить» выберите «Отладка процесса как root». Вам придется пройти аутентификацию один раз.

Начиная с Xcode 4.5, я получал странную ошибку, пока полностью не перезапустил Xcode.

0 голосов
/ 14 марта 2012

Если вы хотите отлаживать веб-сервер, работающий на порте 443, вы можете вместо этого запустить его на порте 8443 для своей обычной учетной записи, а затем выполнить: sudo ssh user @ localhost -L 443: localhost: 8443 -N

Тогда вы по-прежнему можете обращаться к своему приложению через правильный порт, но у вас есть преимущество при запуске приложения как обычного пользователя.

0 голосов
/ 20 ноября 2009

Отладка как рут через SSH.

Редактирование активного исполняемого файла -> Отладка -> Удаленная отладка исполняемого файла через SSH.

...