Déboguer l'application Qt sur Ubuntu avec l'autorisation root à l'aide de qt creator


10

Il est possible d'exécuter mon application avec des privilèges root en utilisant sudo, comme ceci:

sudo ./MyApp

Est-il possible de déboguer mon application Qt en utilisant les privilèges root en utilisant QtCreator? Comment puis-je faire cela sur un système Ubuntu?

Réponses:


14
  1. Aller à Tools-> Options-> Environment
  2. Dans l' ongletGeneral sous **System** Groupil y a une Terminaloption .
  3. La valeur par défaut est définie sur /usr/bin/xterm -e. Remplacez-le par /usr/bin/xterm -e sudoou /usr/bin/gnome-terminal -x sudo.
  4. Appuyez sur Applyet sur les OK boutons .
  5. Sous Sélecteur de mode, cliquez sur Projects, sélectionnez RunOption. Sous RunZone de groupe, sélectionnez Run in Terminal.

Rappelez-vous: l' sudooption doit être là

Modifier en /etc/sudoers utilisantsudo visudo

La prochaine fois que vous exécuterez le programme, il sera invoqué dans un nouveau xtermou gnome-terminal avec une autorisation de super-utilisateur et demandera le mot de passe root .


2
C'est la bonne solution
Ray

2
que devons-nous ajouter dans / etc / sudoers?
Necktwi

4
Ne fonctionne pas pour moi, après avoir entré le mot de passe sudo Rapports de sortie de l'application "Le débogage est terminé", aucun des breakpont ne se casse vraiment

Pour mémoire, "Sélecteur de mode" est le panneau de boutons le plus à gauche avec Welcome tout en haut
Eric

1

Je l'ai résolu en démarrant Qt Creator en tant que root.

sudo /usr/bin/qtcreator

Maintenant, il obtiendra l'autorisation root sur l'application lorsque je compilerai et déboguerai. Il est maintenant possible de déboguer mon application avec le privilège root.


3
C'est une chose très très très stupide à faire. Je n'essaie pas d'être offensant. STUPIDE dans le sens où ce n'est pas une chose intelligente à faire. Et je suis sûr que la plupart des gens ne feraient JAMAIS cela.
iharob


1
Ne soyez pas un utilisateur Windows. Ne lancez pas tout en tant que root.
Shahbaz

1
Ne fais pas ça! Cela peut changer la propriété des fichiers source que vous enregistrez dans cette condition, ainsi que la propriété de votre .pro.user et d'autres fichiers de configuration de Qt Creator. Lorsque vous revenez à l'exécution en tant qu'utilisateur normal, vous rencontrerez des erreurs et devrez sauter à travers certains cerceaux pour tout restaurer. J'ai appris cela à la dure ...
BuvinJ

1

L'exécuter en tant que root est une horrible idée. Utilisez plutôt la source et faites en sorte que qtcreator utilise sudo pour lancer gdb comme ceci. Nécessite que vous exécutiez qtcreator à partir d'un sudo tty et auth avant de lancer qtcreator, ou que vous configuriez votre utilisateur pour sudo sans mot de passe (non recommandé). Je coderai une solution plus complète plus tard.

Cela m'a pris 1 à 2 heures de code / débogage sans connaissance préalable de QT. La plupart de ce temps a été passé à attendre la fin de la compilation

https://gist.github.com/ppetraki/a0080da047047ea184c6

--- qtcreator-3.0.1.orig/src/plugins/debugger/gdb/gdbprocess.cpp +++ qtcreator-3.0.1/src/plugins/debugger/gdb/gdbprocess.cpp @@ -59,7 +59,11 @@ QByteArray GdbProcess::readAllStandardEr

void GdbProcess::start(const QString &cmd, const QStringList &args) { - m_gdbProc.setCommand(cmd, Utils::QtcProcess::joinArgs(args)); + QStringList sudoArgs; + sudoArgs << cmd << args; + QString sudoCmd = QString::fromUtf8("/usr/bin/sudo"); + + m_gdbProc.setCommand(sudoCmd, Utils::QtcProcess::joinArgs(sudoArgs)); m_gdbProc.start(); }


1

Je voudrais exécuter le programme à partir d'un terminal avec un serveur GDB (en tant que root), puis me connecter au serveur avec gdb de QtCreator. Vous commenceriez gdbserver avec quelque chose comme ceci:

$ sudo gdbserver host:2345 ./MyApp

Ici, vous hébergez le serveur avec le port 2345. Vous pouvez également vérifier si votre application fonctionne bien avec l'UID 0.

$ sudo ps -u

Maintenant, dans Qt Creator, allez Debug -> Start Debugging -> Attach to Running Debug Server. Remplissez le formulaire ... le plus important est le port et l'adresse du serveur. J'ai choisi 127.0.0.1 et 2345. Vous pouvez sélectionner break at main à break au début du programme. Le serveur GDB ne démarre le programme que lorsque vous vous connectez.


0

Les actions suivantes ont été recommandées sur le forum de support Qt:

Dans Qt Creator, ajoutez un périphérique Linux distant dans Options -> Périphériques. Définissez son adresse comme localhost et l'utilisateur comme root. Créez une paire de clés d'authentification et collez la clé publique dans /root/.ssh/authorized_keys. Ensuite, clonez le kit de bureau dans Options -> Kits et définissez le périphérique pour le nouveau kit sur le périphérique que vous avez créé à l'étape précédente.

Maintenant, lorsque vous démarrez le débogage, Qt Creator doit se connecter automatiquement via ssh à localhost en tant que root, démarrer gdbserver et effectuer le débogage.

Il fonctionne également sans débogage.

Vous devriez peut-être configurer l'installation de votre programme sur un hôte distant, mais c'est une autre histoire et cela se fait différemment pour Qmake et QBS.

https://forum.qt.io/post/185983

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.