Es ist möglich, meine Anwendung mit Root-Rechten sudo
wie folgt auszuführen :
sudo ./MyApp
Ist es möglich, meine Qt-Anwendung mit Root-Rechten mit QtCreator zu debuggen? Wie kann ich das auf einem Ubuntu-System machen?
Es ist möglich, meine Anwendung mit Root-Rechten sudo
wie folgt auszuführen :
sudo ./MyApp
Ist es möglich, meine Qt-Anwendung mit Root-Rechten mit QtCreator zu debuggen? Wie kann ich das auf einem Ubuntu-System machen?
Antworten:
Tools-> Options-> Environment
General
darunter **System** Group
gibt es eine Terminal
Option ./usr/bin/xterm -e
. Ersetzen Sie es durch /usr/bin/xterm -e sudo
oder /usr/bin/gnome-terminal -x sudo
.Apply
und OK
Tasten .Projects
, wählen Sie Run
Option. Run
Wählen Sie unter Gruppenfeld die Option aus Run in Terminal
.Denken Sie daran: sudo
Option muss vorhanden sein
Bearbeiten /etc/sudoers
mitsudo visudo
Wenn Sie das Programm das nächste Mal ausführen, wird es in einer neuen xterm
oder gnome-terminal
mit Super User-Berechtigung aufgerufen und fragt nach dem Root-Passwort .
Ich habe es gelöst, indem ich Qt Creator als root gestartet habe.
sudo /usr/bin/qtcreator
Jetzt erhält es die Root-Berechtigung für die Anwendung, wenn ich kompiliere und debugge. Jetzt ist es möglich, meine Anwendung mit Root-Rechten zu debuggen.
Das als Root auszuführen ist eine schreckliche Idee. Verwenden Sie stattdessen die Quelle und lassen Sie qtcreator sudo verwenden, um gdb wie folgt zu starten. Erfordert, dass Sie qtcreator von tty und auth sudo ausführen, bevor Sie qtcreator starten, oder Ihren Benutzer für kennwortloses sudo konfigurieren (nicht empfohlen). Ich werde später eine vollständigere Lösung codieren.
Ich brauchte 1-2 Stunden Code / Debug ohne Vorkenntnisse in QT. Die meiste Zeit wurde damit verbracht, auf den Abschluss der Kompilierung zu warten
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();
}
Ich würde das Programm von einem Terminal mit einem GDB-Server (als Root) ausführen und dann mit gdb von QtCreator eine Verbindung zum Server herstellen. Sie würden gdbserver mit so etwas starten:
$ sudo gdbserver host:2345 ./MyApp
Hier hosten Sie den Server mit Port 2345. Sie können auch überprüfen, ob Ihre Anwendung tatsächlich mit UID 0 ausgeführt wird.
$ sudo ps -u
Gehen Sie nun in Qt Creator zu Debug -> Debugging starten -> An laufenden Debug-Server anhängen. Füllen Sie das Formular aus ... das wichtigste ist der Port und die Serveradresse. Ich habe 127.0.0.1 und 2345 gewählt. Sie können break at main auswählen, um zu Beginn des Programms break zu machen. Der GDB-Server startet das Programm erst, wenn Sie eine Verbindung herstellen.
Die folgenden Aktionen wurden im Qt-Supportforum empfohlen:
Fügen Sie in Qt Creator unter Optionen -> Geräte ein entferntes Linux-Gerät hinzu. Legen Sie die Adresse als localhost und den Benutzer als root fest. Erstellen Sie ein Paar Authentifizierungsschlüssel und fügen Sie den öffentlichen Schlüssel in ein /root/.ssh/authorized_keys
. Klonen Sie dann das Desktop-Kit unter Optionen -> Kits und stellen Sie das Gerät für das neue Kit auf das Gerät ein, das Sie im vorherigen Schritt erstellt haben.
Wenn Sie jetzt mit dem Debuggen beginnen, sollte Qt Creator automatisch über ssh eine Verbindung zu localhost als root herstellen, gdbserver starten und das Debuggen durchführen.
Es funktioniert auch ohne Debugging.
Vielleicht sollten Sie die Installation Ihres Programms auf einem Remote-Host einrichten, aber das ist eine andere Geschichte und für Qmake und QBS anders.