web-dev-qa-db-fra.com

Débogage de l'application Qt sur Ubuntu avec la permission du root en utilisant qt creator

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?

10
Arun Kumar K S

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.

1
Arun Kumar K S
  1. Allez à Tools-> Options-> Environment
  2. Dans l'onglet General sous **System** Group, il existe une option Terminal.
  3. La valeur par défaut est définie sur/usr/bin/xterm -e. Remplacez-le par /usr/bin/xterm -e Sudo ou /usr/bin/gnome-terminal -x Sudo.
  4. Appuyez sur les boutons Apply et OK.
  5. Sous sélecteur de mode , cliquez sur 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 .

13
Jithin Mohan

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(); }

1
ppetraki

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é.

1
benzeno