Debug dell'applicazione Qt su Ubuntu con il permesso di root usando qt creator


10

È possibile eseguire la mia applicazione con i privilegi di root usando sudo, in questo modo:

sudo ./MyApp

È possibile eseguire il debug della mia applicazione Qt usando i privilegi di root usando QtCreator? Come posso farlo su un sistema Ubuntu?

Risposte:


14
  1. Vai a Tools-> Options-> Environment
  2. Nella schedaGeneral sotto **System** Groupc'è Terminalun'opzione .
  3. Il valore predefinito è impostato su /usr/bin/xterm -e. Sostituirlo con /usr/bin/xterm -e sudoo /usr/bin/gnome-terminal -x sudo.
  4. Premere Applye i OK pulsanti .
  5. In Selettore modalità fare clic su Projects, selezionare RunOpzione. Nella Runcasella di gruppo selezionare Run in Terminal.

Ricorda: l' sudoopzione deve essere lì

Modifica /etc/sudoers usandosudo visudo

La prossima volta che avvierai il programma verrà richiamato in una nuova xtermo gnome-terminal con autorizzazione Super User e chiederai la password di root .


2
Questa è la soluzione giusta
Ray

2
cosa dovremmo aggiungere in / etc / sudoers?
Necktwi,

4
Non funziona per me, dopo aver inserito la password sudo L'output dell'applicazione riporta "Il debug è terminato", nessuno dei breakponts si rompe davvero

Per la cronaca, "Selettore modalità" è il pannello più a sinistra con Benvenuti in cima
Eric

1

L'ho risolto avviando Qt Creator come root.

sudo /usr/bin/qtcreator

Ora otterrà il permesso di root per l'applicazione quando compilo e debug. Ora è possibile eseguire il debug della mia applicazione con il privilegio di root.


3
È una cosa molto, molto, molto stupida da fare. Non sto cercando di essere offensivo. STUPID, nel senso che non è una cosa intelligente da fare. E sono sicuro che la maggior parte delle persone non lo farebbe MAI .
iharob,


1
Non essere un utente di Windows. Non eseguire tutto come root.
Shahbaz,

1
Non farlo! Ciò può modificare la proprietà dei file di origine salvati in questa condizione, oltre alla proprietà di .pro.user e altri file di configurazione di Qt Creator. Quando torni a correre come utente normale, ti imbatterai in errori e dovrai saltare alcuni cerchi per ripristinare tutto. L'ho imparato a mie
spese

1

Eseguirlo come root è un'idea orribile. Invece, usa il sorgente e fai in modo che qtcreator usi sudo per avviare gdb in questo modo. Richiede di eseguire qtcreator da un tty e auth sudo prima di avviare qtcreator o di configurare l'utente per sudo senza password (non consigliato). Codificherò una soluzione più completa in seguito.

Mi ci sono voluti 1-2 ore di codice / debug senza alcuna conoscenza preliminare di QT. La maggior parte del tempo è stato trascorso in attesa del completamento della 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(); }


1

Vorrei eseguire il programma da un terminale con un server GDB (come root) e quindi connettermi al server con gdb da QtCreator. Avresti avviato gdbserver con qualcosa del genere:

$ sudo gdbserver host:2345 ./MyApp

Qui stai ospitando il server con la porta 2345. Puoi anche verificare se la tua applicazione è effettivamente in esecuzione con UID 0.

$ sudo ps -u

Ora, in Qt Creator, vai su Debug -> Avvia debug -> Collega all'esecuzione del server di debug. Compila il modulo ... il più importante è l'indirizzo della porta e del server. Ho scelto 127.0.0.1 e 2345. È possibile selezionare l'interruzione principale per interrompere all'inizio del programma. Il server GDB non avvia il programma fino a quando non ti connetti.


0

Le seguenti azioni sono state raccomandate sul forum di supporto di Qt:

In Qt Creator, aggiungi un dispositivo Linux remoto in Opzioni -> Dispositivi. Imposta il suo indirizzo come localhost e l'utente come root. Crea una coppia di chiavi di autenticazione e incolla la chiave pubblica in /root/.ssh/authorized_keys. Quindi clonare Kit desktop in Opzioni -> Kit e impostare il dispositivo per il nuovo kit sul dispositivo creato nel passaggio precedente.

Ora, quando si avvia il debug, Qt Creator dovrebbe connettersi automaticamente su ssh a localhost come root, avviare gdbserver ed eseguire il debug.

Funziona anche per l'esecuzione senza debug.

Forse dovresti configurare l'installazione del tuo programma sull'host remoto, ma questa è una storia diversa ed è fatta diversamente per Qmake e QBS.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.