comment déboguer une application en tant que root dans eclipse sous Ubuntu?
Je suis de programmation d'application à l'aide de libpcap. quand je debug de l'application en mode normal, le ppce ne peut pas obtenir le périphérique réseau. il semble que j'ai pour déboguer l'application de la racine.
Comment puis-je déboguer l'application dans la racine? J'ai le mot de passe root.
Je pense que l'éclipse a une option qui peut ajouter de la racine de l'application de débogage,mais je ne sais pas comment le faire.
s'il vous plaît aider.
- Fondamentalement, l'exécution de votre débogueur en tant que root. Êtes-vous essayer d'utiliser un débogueur par le biais d'un IDE?
- Pouvez-vous me dire comment faire pour exécuter le débogueur en tant que root? oui, j'utilise l'IDE eclipse.
- Sauf si vous êtes également l'exécution de votre IDE tant que root, il n'y a probablement pas de solution facile ou directement à l'exécution de votre débogueur en tant que root.
Vous devez vous connecter pour publier un commentaire.
mot de passe:
sudo visudo
Ajoutez la ligne suivante après que toutes les autres règles:
<youruser> ALL=(root) NOPASSWD:/usr/bin/gdb
par exemple, dans le Run > Debug Configurations > C/C++ > Votreprojet Debug:
changement Débogueur > Main > débogueur GDB de
gdb
àsudo -u <youruser> gdb
Mise à jour (et attention!):
Dans son commentaire nategoose a souligné que cette réponse devrait venir avec un avertissement:
Permettant à un utilisateur d'utiliser
sudo
pourgdb
comme suggéré dans ma réponse donne en effet des privilèges d'administrateur pour lui qui, dans de nombreux cas, peut être un effet secondaire non désiré. Je considère donc que la réponse appropriée dans un environnement où il n'est pas supposé que l'utilisateur pourrait essayer de nuire au système (par exemple, il est de votre propre ordinateur personnel ou une machine virtuelle)Pour un multi-(non approuvé)-l'environnement de l'utilisateur, je pense qu'il pourrait être une meilleure idead à utiliser unix fichier de capacités pour permettre
gdb
pour déboguer une application sans avoir besoin de privilèges d'administrateurCould not determine GDB version using command: sudo -u debug gdb --version
Comment le résoudre?#!/usr/bin/env bash \n sudo "$@"
. Cette réponse estsudo -u <youruser>
ne fonctionne pas pour moi.Vous pouvez utiliser gdbserver sur localhost pour joindre un processus existant, voici la ligne de commande:
Ou vous pouvez créer un nouveau processus à l'aide de gdbserver:
Ensuite, vous pouvez créer une configuration débogage dans Eclipse, dans le débogueur onglet, le débogueur élément, sélectionnez gdbserver, et l'entrée du port d'écoute dans l'onglet connexion dans le soufflet.
Lancer Eclipse avec sudo (juste pour être complet: http://www.eclipse.org/forums/index.php?t=msg&goto=516838&)
Mise à jour: Suivez xmoex solution. Si vous exécutez Eclipse en tant que root (ie. l'utilisation de sudo), vos fichiers seront racine appartenant à... que vous ne voulez probablement pas.
Une autre solution est de vous accorder (ou de la gdb exécutable) le droit d'effectuer des ppce des captures d' mentionné ici. Avec quelque chose comme ceci :
vous devriez être en mesure de permettre de capturer des paquets de gdb sans être root.
gdbserver
cette question a été posée il y a longtemps, mais si cela aidera à quelqu'un, j'ai ouvert un bug dans bugzilla et ce court-fil a résolu le problème:
bug bugzilla
manière la plus facile, essayez de sudo ./eclipse, puis de débogage comme d'habitude
À partir de la console dans le répertoire avec votre exécutable:
Si eclipse prend en charge le débogage à distance, alors vous pourriez le faire, même si elle est en cours d'exécution au niveau local.
À partir de la console:
Puis dire Éclipse l'adresse (localhost et le numéro de port que vous avez choisi).
Oh oui, vous l'avez dit la raison que vous faisiez que c'était parce que vous étiez à l'aide de
libpcap
, de sorte que vous pouvez ne pas utiliser le débogage à distance via TCP parce que vous pourriez finir par la capture de votre débogage paquets de connexion en plus de votre trafic réseau.Dans ce cas, vous faites de votre télécommande (mais vraiment locale) le débogage sur un port série. Je ne l'ai jamais fait sur un ordinateur local, mais vous pouvez utiliser les deux ports série (les attacher si une valeur null modem) ou essayez d'utiliser un psudoterminal:
Cela va créer le psudo-terminal de la sous
/dev/pts/
, mais vous aurez à trouver le nom de celui-ci, et il pourrait également créer avec des autorisations plus restrictives. Vous pouvez obtenir autour de ceux-ci. Sauf si vous utilisez beaucoup de fenêtres du terminal en tant que root, il n'est pas probable que vous avez un grand nombre d'entrées en vertu de/dev/pts
qui appartiennent à la racine, afin de prendre note de celui qui ne après l'exécution de la commande ci-dessus, puissudo chmod
ousudo chown
afin de la rendre utilisable pour votre utilisateur normal et puis, dites à votre débogueur pour l'utiliser comme votre connexion série à votre débogage à distance de la cible.