Il est possible d'exécuter mon application avec les privilèges root à l'aide de Sudo
, comme ceci:
Sudo ./MyApp
Est-il possible de déboguer mon application Qt en utilisant les privilèges root à l'aide de QtCreator? Comment puis-je faire cela sur un système Ubuntu?
Je l'ai résolu en démarrant Qt Creator en tant que root.
Sudo /usr/bin/qtcreator
Maintenant, il obtiendra l’autorisation racine de l’application lors de la compilation et du débogage. Il est maintenant possible de déboguer mon application avec le privilège root.
Tools-> Options-> Environment
General
sous **System** Group
, il existe une option Terminal
./usr/bin/xterm -e
. Remplacez-le par /usr/bin/xterm -e Sudo
ou /usr/bin/gnome-terminal -x Sudo
.Apply
et OK
.Projects
, sélectionnez l'option Run
. Sous Run
Zone de groupe , sélectionnez Run in Terminal
.N'oubliez pas que l'option Sudo
doit être présente
Edit/etc/sudoers
en utilisant Sudo visudo
La prochaine fois que vous exécuterez le programme, il sera invoqué dans un nouveau xterm
ou gnome-terminal
avec la permission du super utilisateur et demandera le mot de passe root .
Exécuter cela en tant que racine est une idée horrible. A la place, utilisez le source et faites que qtcreator utilise Sudo pour lancer gdb comme ceci. Vous devez exécuter qtcreator à partir d'un terminal et autoriser Sudo avant de lancer qtcreator, ou configurer votre utilisateur pour Sudo sans mot de passe (non recommandé). Je coderai une solution plus complète plus tard.
Il m'a fallu 1-2 heures de code/débogage sans connaissance préalable de QT. La plupart de ce temps a été passé à attendre que la compilation soit terminée
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(); }
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 lanceriez 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 est effectivement en cours d'exécution avec l'UID 0.
$ Sudo ps -u
Maintenant, dans Qt Creator, allez dans Debug -> Démarrer le débogage -> Attacher au serveur de débogage en cours. 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 une pause au niveau principal pour effectuer une pause au début du programme. Le serveur GDB ne démarre pas le programme tant que vous n'êtes pas connecté.