Możliwe jest uruchamianie mojej aplikacji z uprawnieniami roota za pomocą sudo
:
sudo ./MyApp
Czy jest możliwe debugowanie mojej aplikacji Qt przy użyciu uprawnień roota przy użyciu QtCreator? Jak mogę to zrobić w systemie Ubuntu?
Możliwe jest uruchamianie mojej aplikacji z uprawnieniami roota za pomocą sudo
:
sudo ./MyApp
Czy jest możliwe debugowanie mojej aplikacji Qt przy użyciu uprawnień roota przy użyciu QtCreator? Jak mogę to zrobić w systemie Ubuntu?
Odpowiedzi:
Tools-> Options-> Environment
General
poniżej **System** Group
znajduje się Terminal
opcja ./usr/bin/xterm -e
. Zamień na /usr/bin/xterm -e sudo
lub /usr/bin/gnome-terminal -x sudo
.Apply
i OK
przyciski .Projects
, wybierz Run
opcję. W Run
polu Group Group wybierz Run in Terminal
.Pamiętaj: sudo
opcja musi być dostępna
Edytuj /etc/sudoers
za pomocąsudo visudo
Następnym razem, gdy uruchomisz program, zostanie on wywołany w nowej wersji xterm
lub gnome-terminal
z uprawnieniem superużytkownika i poprosi o hasło roota .
Rozwiązałem to, uruchamiając Qt Creator jako root.
sudo /usr/bin/qtcreator
Teraz otrzyma uprawnienia root do aplikacji, kiedy będę kompilować i debugować. Teraz możliwe jest debugowanie mojej aplikacji z uprawnieniami roota.
Uruchamianie go jako root to okropny pomysł. Zamiast tego użyj źródła i spraw, aby qtcreator użył sudo do uruchomienia gdb w ten sposób. Wymaga uruchomienia qtcreatora z tty i auth sudo przed uruchomieniem qtcreator lub skonfigurowania użytkownika do sudo bez hasła (niezalecane). Później koduję bardziej kompletne rozwiązanie.
Zajęło mi to 1-2 godziny kodu / debugowania bez wcześniejszej wiedzy o QT. Większość czasu spędzono na oczekiwaniu na zakończenie kompilacji
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();
}
Chciałbym uruchomić program z terminala z serwerem GDB (jako root), a następnie połączyć się z serwerem za pomocą gdb z QtCreator. Uruchomiłbyś gdbserver z czymś takim:
$ sudo gdbserver host:2345 ./MyApp
Tutaj hostujesz serwer z portem 2345. Możesz również sprawdzić, czy twoja aplikacja rzeczywiście działa z UID 0.
$ sudo ps -u
Teraz w Qt Creator przejdź do Debuguj -> Rozpocznij debugowanie -> Dołącz do działającego serwera debugowania. Wypełnij formularz ... najważniejszy jest port i adres serwera. Wybrałem 127.0.0.1 i 2345. Możesz wybrać break at main, aby break na początku programu. Serwer GDB nie uruchamia programu, dopóki się nie połączysz.
Na forum wsparcia Qt zalecane były następujące działania:
W Qt Creator dodaj zdalne urządzenie Linux w Opcje -> Urządzenia. Ustaw adres jako localhost, a użytkownik jako root. Utwórz parę kluczy uwierzytelniających i wklej klucz publiczny do /root/.ssh/authorized_keys
. Następnie sklonuj zestaw pulpitu w Opcje -> Zestawy i ustaw urządzenie dla nowego zestawu na urządzenie utworzone w poprzednim kroku.
Teraz, kiedy zaczniesz debugować, Qt Creator powinien automatycznie połączyć się przez ssh z localhost jako root, uruchomić gdbserver i wykonać debugowanie.
Działa również do uruchamiania bez debugowania.
Być może powinieneś skonfigurować instalację swojego programu na zdalnym hoście, ale to inna historia i jest inaczej w Qmake i QBS.