Debuggen Sie die Qt-Anwendung unter Ubuntu mit Root-Berechtigung unter Verwendung des QT-Erstellers

10

Es ist möglich, meine Anwendung mit Root-Rechten sudowie 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?

Arun Kumar KS
quelle

Antworten:

14
  1. Gehe zu Tools-> Options-> Environment
  2. In der RegisterkarteGeneral darunter **System** Groupgibt es eine TerminalOption .
  3. Der Standardwert ist festgelegt /usr/bin/xterm -e. Ersetzen Sie es durch /usr/bin/xterm -e sudooder /usr/bin/gnome-terminal -x sudo.
  4. Drücken Sie Applyund OK Tasten .
  5. Unter Mode Selector klicken Sie auf Projects, wählen Sie RunOption. RunWählen Sie unter Gruppenfeld die Option aus Run in Terminal.

Denken Sie daran: sudoOption muss vorhanden sein

Bearbeiten /etc/sudoers mitsudo visudo

Wenn Sie das Programm das nächste Mal ausführen, wird es in einer neuen xtermoder gnome-terminal mit Super User-Berechtigung aufgerufen und fragt nach dem Root-Passwort .

Jithin Mohan
quelle
2
Dies ist die richtige Lösung
Ray
2
Was sollen wir in / etc / sudoers hinzufügen?
Necktwi
4
Funktioniert bei mir nicht, nachdem ich das sudo-Passwort eingegeben habe. Anwendungsausgabeberichte "Debugging ist beendet", keiner der Breakponts bricht wirklich
Für die Aufzeichnung ist "Mode Selector" das Schaltflächenfeld ganz links mit "Welcome" ganz oben
Eric
1

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.

Arun Kumar KS
quelle
3
Das ist eine sehr sehr sehr dumme Sache. Ich versuche nicht, beleidigend zu sein. DUMM in dem Sinne, dass es keine kluge Sache ist. Und ich bin sicher, dass die meisten Leute das NIE tun würden .
Iharob
1
Sei kein Windows-Benutzer. Führen Sie nicht alles als root aus.
Shahbaz
1
Tu das nicht! Dies kann den Besitz der Quelldateien ändern, die Sie unter dieser Bedingung speichern, sowie den Besitz Ihres .pro.user und anderer Qt Creator-Konfigurationsdateien. Wenn Sie wieder als normaler Benutzer ausgeführt werden, treten Fehler auf und Sie müssen durch einige Rahmen springen, um alles wiederherzustellen. Ich habe das auf die harte
Tour
1

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

ppetraki
quelle
1

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.

Benzolo
quelle
0

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.

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

Alexandr Zarubkin
quelle