2009-06-23 13 views
24

Dans mon programme, j'ai besoin de créer des sockets et de les lier pour écouter le port HTTP (80). Le programme fonctionne correctement lorsque je le lance à partir de la ligne de commande avec sudo, en augmentant les permissions à root. L'exécution sous XCode donne une erreur «permission denied» sur l'appel à la fonction de liaison (asio :: ip :: tcp :: acceptor :: bind()).Débogage dans XCode en tant que root

Comment puis-je faire du débogage sous XCode? Tout est fait en C++ et boost.asio sous Mac OS X 10.5 avec XCode 3.1.2.

Répondre

23

Mise à jour: Pour Xcode 4.5 et versions ultérieures, voir this answer à la place. La seule façon dont je suis conscient de faire ce que vous demandez est d'exécuter Xcode en tant que root. Une fois que vous êtes en cours d'exécution en tant que root, tous les processus lancés à partir de Xcode s'exécuteront également en tant que root. Notez, cependant, que si vous créez ou modifiez des fichiers, ils appartiendront à root, ce qui signifie que vous devrez les chown avant de pouvoir les modifier en tant qu'utilisateur normal en premier. Je voudrais un moyen pour Xcode de dire "Lancer le processus en tant que root", mais pour autant que je sache, aucune fonctionnalité n'est disponible.

Notez que vous pouvez également exécuter l'application dans le débogueur de ligne de commande gdb pour déboguer votre application. Exécutez

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

Ensuite, vous pouvez garder Xcode ouvert, modifier à volonté et déboguer votre programme dans gdb. C'est ce que je fais généralement.

EDIT: Lecteurs du futur: voir la réponse d'Alexander Stavonin; il parle de comment faire cela. Si vous êtes d'accord avec les clés ssh et que vous activez l'utilisateur root sur votre système, sa réponse est la bonne façon de procéder.

+0

Merci, mais ce problème avec les propriétaires de fichiers est vraiment ennuyeux. – Anton

+0

Malheureusement, la méthode d'Alexander ne semble pas fonctionner avec XCode4, donc la méthode sudo dans cette réponse semble être la seule qui fonctionne. – JosephH

0

Déboguer en tant que racine via SSH. Editer Active Executable -> Debugging -> Déboguer l'exécutable à distance via SSH.

+0

Je ne peux pas le faire fonctionner. Ce que j'ai mis sur cette page: Lors de l'utilisation "GDB" Utiliser "Pipe" pour entrée/sortie standard, "Vérifié" Exécutable de débogage à distance via SSH, Connectez à: "[email protected]", "Décoché" Démarrer l'exécutable après démarrer le débogueur. Et quand j'utilise mon application, elle affiche un dialogue avec l'authentification SSH mais la saisie de mon mot de passe comme phrase secrète indique "Échec de l'authentification". J'ai également essayé d'utiliser mon nom d'utilisateur, mais cela ne fonctionne pas aussi. Et, btw, l'application ne démarre pas du tout. Qu'est-ce que je fais de mal? – Anton

13

Xcode est capable d'exécuter l'application de débogage en tant que root. Pour ce faire, les étapes suivantes doivent être effectuées:

  1. Activer l'utilisateur root pour la machine locale.

    a. Exécutez «Utilitaire de répertoire» (/ System/Library/CoreServices/Directory Utility.app)

    b. Choisissez "Activer l'utilisateur racine" dans le menu Edition et entrez le mot de passe root.

  2. Activer la journalisation à distance.

    a. Dans Préférences Système ... -> Partage, cochez la case Connexion à distance. Cette option active le démon SSH.

  3. Créez des clés publique/privée ssh et copiez la clé publique dans le dossier .ssh/authorized_keys pour l'utilisateur root.

    a.Ouvrez le terminal sur la machine locale et tapez ssh-keygen -t rsa

    b. Acceptez l'emplacement par défaut et tapez le mot de passe pour la racine.

    c. Connectez-vous en tant que root su - et créez le répertoire ~/.ssh. (~ ==/var/root)

    d. Copiez la clé publique à la racine: cat ~/.ssh/id_rsa.pub | ssh [email protected] "cat - >> ~/.ssh/authorized_keys"

    e. Vérifiez si tout est OK. Saisissez ssh [email protected]. Il ne devrait pas demander le mot de passe root.

  4. Activer le débogage à distance via ssh dans Xcode.

    a. Sélectionnez «Get Info» dans le menu déroulant «Executables».

    b. Dans les paramètres "Débogage" cochez la case "Déboguer l'exécutable à distance via ssh" et mettez root @ localhost comme information "Connect to".

  5. Tout devrait être Ok maintenant ☺

From blog

+0

Il semble que je ne puisse pas trouver «Debug exécutable à distance via ssh» sur Xcode4. Est-ce? –

+0

Malheureusement, je ne sais pas. À ce stade, la meilleure solution pour moi est GBD en cas de débogage racine. –

0

Si vous voulez déboguer un serveur Web en cours d'exécution sur le port 443, vous pourriez plutôt l'exécuter sur le port 8443 sur votre compte normal et faire un: sudo ssh utilisateur @ localhost -L 443: localhost: 8443 -N

Ensuite, vous pouvez toujours contacter votre application sur le bon port, mais avoir l'avantage d'exécuter l'application en tant qu'utilisateur normal.

2

XCode ne prend plus en charge le rendu de débogage à distance, la plupart de ces réponses étant obsolètes.

Pour déboguer un programme en tant que root, c'est maintenant facile. Dans le menu Produit, utilisez "Modifier le schéma ..." et dans le volet "Infos" des schémas "Exécuter", sélectionnez "Déboguer le processus en tant que root". Vous devrez vous authentifier une fois.

À partir de Xcode 4.5 j'ai eu une erreur étrange jusqu'à ce que j'ai tout à fait Xcode et redémarré.

21

Dans Xcode 4.5 Produit ->Modifier le choix des: Regardez dans l'onglet Infos sous processus de débogage Comme et choisissez l'option la racine.

+0

Dans Xcode 5, Cmd + rstackhouse