Uygulamamı şu şekilde kullanarak kök ayrıcalıklarıyla çalıştırmak mümkündür sudo
:
sudo ./MyApp
Qt uygulamamda QtCreator kullanarak kök ayrıcalıklarını kullanarak hata ayıklamak mümkün müdür? Bunu bir Ubuntu sisteminde nasıl yapabilirim?
Uygulamamı şu şekilde kullanarak kök ayrıcalıklarıyla çalıştırmak mümkündür sudo
:
sudo ./MyApp
Qt uygulamamda QtCreator kullanarak kök ayrıcalıklarını kullanarak hata ayıklamak mümkün müdür? Bunu bir Ubuntu sisteminde nasıl yapabilirim?
Yanıtlar:
Tools-> Options-> Environment
General
altında **System** Group
bir var Terminal
Seçeneği ./usr/bin/xterm -e
. /usr/bin/xterm -e sudo
Veya ile değiştirin /usr/bin/gnome-terminal -x sudo
.Apply
ve OK
Düğmeler .Projects
seçeneğine tıklayın, Run
Seçenek'i seçin . Run
Grup Kutusu altında öğesini seçin Run in Terminal
.Unutmayın: sudo
seçenek orada olmalı
/etc/sudoers
Kullanarak düzenlesudo visudo
Eğer yeni bir yer çağrılır programını çalıştırmak dahaki sefere xterm
veya gnome-terminal
Süper Kullanıcı İzni ve edecektir kök şifre isteyecektir .
Qt Creator'ı root olarak başlatarak çözdüm.
sudo /usr/bin/qtcreator
Şimdi derlediğimde ve hata ayıkladığımda uygulamanın kök iznini alacak. Şimdi uygulamada ayrıcalıkla hata ayıklamak mümkün.
Bunu kök olarak çalıştırmak korkunç bir fikirdir. Bunun yerine, kaynağı kullanın ve qtcreator'ın gdb'yi bu şekilde başlatmak için sudo kullanmasını sağlayın. Qtcreator'ı başlatmadan önce qtcreator'ı tty ve auth sudo'dan çalıştırmanızı veya kullanıcınızı şifresiz sudo için yapılandırmanızı gerektirir (önerilmez). Daha sonra daha eksiksiz bir çözümü kodlayacağım.
Daha önce QT bilgisi olmadan 1-2 saat kod / hata ayıklama beni aldı. Çoğu zaman derlemenin tamamlanmasını beklemek için harcandı
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();
}
Programı bir GDB sunucusu (kök olarak) ile bir terminalden çalıştırmak ve daha sonra QtCreator gdb ile sunucuya bağlanmak. Gdbserver'a böyle bir şeyle başlıyorsunuz:
$ sudo gdbserver host:2345 ./MyApp
Burada sunucuyu 2345 numaralı bağlantı noktasıyla barındırıyorsunuz. Uygulamanızın gerçekten de UID 0 ile çalışıp çalışmadığını da kontrol edebilirsiniz.
$ sudo ps -u
Şimdi Qt Creator'da Hata Ayıkla -> Hata Ayıklamayı Başlat -> Çalışan Hata Ayıklama Sunucusuna Ekle seçeneğine gidin. Formu doldurun ... en önemlisi port ve sunucu adresidir. 127.0.0.1 ve 2345'i seçtim. Programın başlangıcında kırmak için ana mola vermeyi seçebilirsiniz. GDB sunucusu siz bağlanana kadar programı başlatmaz.
Qt destek forumunda aşağıdaki işlemler önerildi:
Qt Creator'da Seçenekler -> Aygıtlar'a uzak Linux aygıtını ekleyin. Adresini localhost ve kullanıcı olarak root olarak ayarlayın. Bir çift kimlik doğrulama anahtarı oluşturun ve genel anahtarı yapıştırın /root/.ssh/authorized_keys
. Ardından Seçenekler -> Kitler içindeki Masaüstü kitini klonlayın ve yeni kit için cihazı önceki adımda oluşturduğunuz cihaza ayarlayın.
Şimdi, hata ayıklamaya başladığınızda, Qt Creator otomatik olarak ssh üzerinden localhost'a root olarak bağlanmalı, gdbserver'ı başlatmalı ve hata ayıklama gerçekleştirmelidir.
Hata ayıklama olmadan da çalışır.
Belki de programınızı uzak ana bilgisayara yüklemelisiniz, ancak bu farklı bir hikaye ve Qmake ve QBS için farklı şekilde yapıldı.