2010-05-23 7 views
30

Je programme une application en utilisant libpcap. Lorsque je débogue l'application en mode normal, pcap ne peut pas obtenir le périphérique réseau. il semble que je dois déboguer l'application en root. Comment puis-je déboguer l'application en root? J'ai le mot de passe root. Je pense qu'éclipse a une telle option qui peut ajouter la racine pour l'application de débogage, mais je ne sais pas comment le faire. aidez s'il vous plaît.comment déboguer l'application en tant que root dans Eclipse sous Ubuntu?

+1

Fondamentalement, exécutez votre débogueur en tant que root. Essayez-vous d'utiliser un débogueur via un IDE? – Artelius

+0

Pouvez-vous me dire comment exécuter le débogueur en tant que root? oui, j'utilise eclipse IDE. – futang

+0

Si vous n'exécutez pas votre IDE en tant que root, il n'y a probablement pas de moyen simple ou direct d'exécuter votre débogueur en tant que root. – nategoose

Répondre

-1

A partir de la console dans le répertoire avec votre exécutable:

sudo gdb ./my_program 

Si Eclipse prend en charge le débogage à distance, vous pouvez le faire, même si elle est en cours d'exécution au niveau local.

A partir de la console:

sudo gdbserver localhost:<port_number> ./my_program 

Et puis dire Eclipse l'adresse (localhost et le numéro de port que vous avez choisi). Oh oui, vous avez dit que c'était parce que vous utilisiez libpcap, donc vous ne voulez pas utiliser le débogage à distance sur TCP car vous pourriez finir par capturer vos paquets de connexion de débogage en plus de votre autre trafic réseau .

Dans ce cas, vous effectuez votre débogage distant (mais vraiment local) sur un port série. Je ne l'ai jamais fait cela sur une machine locale, mais vous pouvez utiliser deux ports série réels (les attacher si un modem nul) ou essayez d'utiliser un psudoterminal:

sudo gdbserver /dev/ptmx ./my_program 

Cela va créer le psudoterminal sous /dev/pts/ mais vous Je vais devoir en trouver le nom, et il pourrait aussi le créer avec des permissions restrictives. Vous pouvez contourner ceux-ci. Sauf si vous exécutez beaucoup de fenêtres de terminal en tant que root, il est peu probable que vous ayez beaucoup d'entrées sous /dev/pts qui appartiennent à root, prenez donc note de celle qui exécute la commande ci-dessus puis sudo chmod ou sudo chown pour la rendre utilisable pour votre utilisateur normal, puis dites à votre débogueur de l'utiliser comme votre connexion série à votre cible de débogage à distance.

3

Lancer Eclipse avec sudo (juste pour être complet: http://www.eclipse.org/forums/index.php?t=msg&goto=516838&)

Mise à jour: Suivez solution xmoex. Si vous exécutez Eclipse en tant que root (c'est-à-dire en utilisant sudo), vos fichiers appartiendront à la racine ... ce que vous ne voulez probablement pas.

+0

Ce n'est pas une bonne idée comme expliqué ici: http://stackoverflow.com/questions/2580279/how-do-i-run-my-application-as-superuser-from-eclipse#comment2588681_2580560 –

+0

Je suis d'accord avec vous Paolo , la réponse de xmoex est une bien meilleure solution. –

56
  1. Activer votre utilisateur à exécuter en tant que root sans être demandé pour tout mot de passe:
    sudo visudo
    Ajoutez la ligne suivante après toutes les autres règles:
    <youruser> ALL=(root) NOPASSWD:/usr/bin/gdb
  2. Créer ou modifier une configuration de débogage dans exécuter gdb en tant que root
    dans Exécuter> Configurations de débogage> C/C++ Application> YourProject Debug:
    changement Debugger> Principal> GDB débogueur de gdb à sudo -u <youruser> gdb

Mise à jour (et un avertissement!):

Dans son commentaire nategoose a souligné que cette réponse devrait venir avec un avertissement:

permettant à un utilisateur d'utiliser sudo pour gdb comme suggéré dans ma réponse donne en fait des privilèges d'administrateur pour lui/elle ce qui dans de nombreux cas pourrait être un effet secondaire indésirable. Je considère donc que la réponse est appropriée dans un environnement où l'utilisateur n'est pas supposé essayer de nuire au système (par exemple, votre propre ordinateur personnel ou une machine virtuelle)

Pour un environnement multi-utilisateur (non sécurisé) Je pense que ce pourrait être une meilleure idead d'utiliser unix' file capabilities pour permettre gdb de déboguer une application sans avoir besoin de privilèges d'administrateur

+4

J'ai changé le débogueur de gdb en sudo gdb et cela fonctionne. – shahensha

+1

Brillante réponse, notez pour les autres un petit problème que j'ai rencontré: LD_LIBRARY_PATH est défini comme mon utilisateur mais root ne l'a pas, donc je l'ai ajouté à ma commande sudo mais sudo ne vous permet pas de définir LD_LIBRARY_PATH donc je ajouté cela dans visudo 'Defaults env_keep + = "LD_LIBRARY_PATH"' – stu

1

une autre solution est de vous accorder (ou l'exécutable gdb) les droits pour faire une PPCE capture comme mentioned here. Avec quelque chose comme ceci:

setcap cap_net_raw,cap_net_admin=eip /usr/bin/gdb 

vous devriez être en mesure de permettre de capturer des paquets à gdb sans être root.

+0

Cela a fonctionné lorsqu'il est exécuté en tant que super utilisateur. Le débogage à distance a également été rendu plus facile en accordant également l'accès aux captures pcap à 'gdbserver' – fredk

0

cette question a été posée il y a longtemps, mais si cela vous aidera à quiconque ouvrir un bogue dans Bugzilla et ce court-fil a résolu le problème: bugzilla bug

3

Vous pouvez utiliser gdbserver sur localhost pour attacher un processus existant , ce qui suit est la ligne de commande:

sudo gdbserver :<listening port> --attach <pid> 

Ou vous pouvez créer un nouveau processus en utilisant gdbserver:

sudo gdbserver :<listening port> <process executable> 

Ensuite, vous pouvez créer une configuration de débogage dans Eclipse, dans l'onglet du débogueur, l'élément du débogueur, sélectionnez gdbserver et entrez le port d'écoute dans l'onglet de connexion dans le bellow.

-1

manière la plus simple, essayez sudo ./eclipse, puis déboguer comme d'habitude

+0

Veuillez ne pas fournir de réponse en double. – lnman