Подтвердить что ты не робот

Отладка в XCode как root

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

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

Все выполнено на С++ и boost.asio в Mac OS X 10.5 с XCode 3.1.2.

4b9b3361

Ответ 1

Обновление: для 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. Это то, что я обычно делаю.

EDIT: читатели из будущего: см. ответ от Александра Ставонина; он говорит о том, как это сделать. Если вы в порядке с ssh-ключами и включите пользователя root в своей системе, его ответ - путь.

Ответ 2

В Xcode 4.5 ProductEdit Scheme: зайдите на вкладку "Информация" в разделе "Отладка процесса как" и выберите корневую опцию.

Ответ 3

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

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

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

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

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

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

  • Создайте открытые/закрытые ключи ssh и скопируйте открытый ключ в папку .ssh/authorized_keys для пользователя root.

    а. Откройте терминал на локальном компьютере и введите ssh-keygen -t rsa

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

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

    д. Скопируйте открытый ключ в корневой каталог: cat ~/.ssh/id_rsa.pub | ssh [email protected] "cat - >> ~/.ssh/authorized_keys"

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

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

    а. Выберите "Получить информацию" в раскрывающемся меню "Исполняемые файлы".

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

  • Теперь все должно быть ОК.

Из блога

Ответ 4

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

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

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

Ответ 5

Отладка в качестве корня через SSH.

Редактировать Active Executable → Debugging → Удаленное выполнение отладки через SSH.

Ответ 6

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

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