web-dev-qa-db-fra.com

comment déboguer une application en tant que root dans Eclipse dans Ubuntu?

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 doive déboguer l'application en root. Comment déboguer l'application en root? J'ai le mot de passe root. Je pense qu'Eclipse a une telle option qui peut ajouter une racine pour l'application de débogage, mais je ne sais pas comment le faire. veuillez aider.

33
futang
  1. Permettez à votre utilisateur d'exécuter gdb en tant que root sans qu'on lui demande de 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éez ou modifiez une configuration de débogage dans Eclipse pour exécuter gdb en tant que root
    par exemple. dans Run> Debug Configurations> C/C++ Application> YourProject Debug:
    changez le débogueur> Main> débogueur GDB de gdb en Sudo -u <youruser> gdb

Mise à jour (et avertissement!):

Dans son commentaire, nategoose a souligné que cette réponse devrait être accompagnée d'un avertissement:

Permettre à un utilisateur d'utiliser Sudo pour gdb comme suggéré dans ma réponse en fait lui donne des privilèges d'administrateur qui dans de nombreux cas pourrait être un côté indésirable effet. Je considère donc la réponse appropriée dans un environnement où l'on ne suppose pas que l'utilisateur tenterait de nuire au système (par exemple, c'est votre propre ordinateur personnel ou une machine virtuelle)

Pour un environnement multi-utilisateurs (non fiable), je pense que ce serait un meilleur idead d'utiliser capacités de fichier unix pour permettre à gdb de déboguer une application sans avoir besoin d'admin privilèges

62
xmoex

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

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

3
David Alfonso

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 débogueur, l'élément de débogage, sélectionnez gdbserver et entrez le port d'écoute dans l'onglet connexion dans le soufflet.

3
sean

Une autre solution consiste à vous accorder (ou à l'exécutable gdb) le droit de faire des captures pcap comme mentionné ici . Avec quelque chose comme ça:

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

vous devriez pouvoir permettre de capturer des paquets dans gdb sans être root.

1
Cédric Julien

cette question a été posée il y a longtemps mais si cela peut aider quelqu'un, j'ouvre un bug dans bugzilla et ce court fil a résolu le problème: bug bugilla

0
yehudahs

Voici comment je l'ai fait:

Créer une application distante C/C++

  1. Sur la cible, assurez-vous que votre Sudo ne demande pas de PW
  2. Regardez Configurations de débogageDébogueurNuméro de port
  3. Modifier Configurations de débogagePrincipalCommandes à exécuter avant l'application

Changer pour:

Sudo gdbserver :<port number> <path to application>;exit #

Cela exécutera essentiellement le gdbserver qui serait normalement exécuté par Eclipse à l'intérieur du Sudo, le '#' de fin empêchera la commande Eclipse de s'exécuter .

0
MattR