Вопрос по xcode, c++, sockets – Отладка в XCode от имени root

25

В моей программе мне нужно создать сокеты и связать их с прослушиванием порта 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

Обновит: Для 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 в вашей системе, его ответ - путь.

К сожалению, метод Александра, похоже, не работает с XCode4, поэтому метод sudo в этом ответе кажется единственным, который работает. JosephH
Спасибо, но эта проблема с владельцем файлов действительно раздражает. Anton
22

Продук -> Редактировать схему: Посмотри вИнформаци вкладка под Отладка процесса как и выберите Корень вариант.

В Xcode 5, Cmd + <вызовет это диалоговое окно. rstackhouse
13

ля этого необходимо выполнить следующие шаги:

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

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

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

Включить дистанционное ведение журнала.

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

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

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

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

c. Войдите как rootsu - и создайте каталог ~ / .ssh. (~ == / var / root)

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

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

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

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

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

Теперь все должно быть хорошо ☺

Из блога

Кажется, я не могу найти «Отладка исполняемого файла удаленно через ssh» на Xcode4. Это Shawn Xie
К сожалению, я не знаю. На данный момент лучшим решением для меня является GBD в случае отладки root. Alexander Stavonin
2

что делает большинство этих ответов устаревшими.

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

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

0

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

Я не могу заставить это работать. Что я установил на этой странице: при использовании «GDB» используйте «Pipe» для стандартного ввода / вывода, «Checked», отлаживайте исполняемый файл удаленно через SSH, подключайтесь к: «[email protected]», «Unchecked», запускайте исполняемый файл после запуск отладчика. И когда я запускаю свое приложение, оно показывает диалог с аутентификацией SSH, но ввод пароля в качестве пароля дает «Аутентификация не удалась». Я также пытался использовать свое имя пользователя, но оно тоже не работает. И, кстати, приложение не запускается вообще. Что я делаю не так Anton
0

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

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

Похожие вопросы