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?
La prochaine fois que vous exécuterez le programme, il sera invoqué dans un nouveau xtermou gnome-terminalavec une autorisation de super-utilisateur et demandera le mot de passe root .
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.
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.
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
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.
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.
Je l'ai résolu en démarrant Qt Creator en tant que root.
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.
la source
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(); }
la source
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:
Ici, vous hébergez le serveur avec le port 2345. Vous pouvez également vérifier si votre application fonctionne bien avec l'UID 0.
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.
la source
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
la source