Aplikasi Debug Qt di ubuntu dengan izin root menggunakan qt creator
10
Dimungkinkan untuk menjalankan aplikasi saya dengan hak akses root menggunakan sudo, seperti ini:
sudo ./MyApp
Apakah mungkin untuk men-debug aplikasi Qt saya menggunakan hak akses root menggunakan QtCreator? Bagaimana saya bisa melakukan ini pada sistem Ubuntu?
Lain kali ketika Anda menjalankan program itu akan dipanggil dalam baru xtermatau gnome-terminaldengan Izin Pengguna Super dan akan meminta kata sandi root .
Tidak berfungsi untuk saya, setelah memasukkan kata sandi sudo Laporan Output Aplikasi "Debugging telah selesai", tidak ada satu pun dari breakponts yang benar-benar rusak
Sebagai catatan, "Mode Selector" adalah panel tombol paling kiri dengan Welcome di bagian paling atas
Eric
1
Saya menyelesaikannya dengan memulai Qt Creator sebagai root.
sudo /usr/bin/qtcreator
Sekarang akan mendapatkan izin root ke aplikasi ketika saya kompilasi dan debug. Sekarang mungkin untuk men-debug aplikasi saya dengan privilege root.
Itu hal yang sangat sangat sangat bodoh untuk dilakukan. Saya tidak berusaha untuk menyerang. BODOH dalam arti bahwa itu bukan hal yang cerdas untuk dilakukan. Dan saya yakin kebanyakan orang tidak akan pernah melakukan ini.
Jangan menjadi pengguna windows. Jangan jalankan semuanya sebagai root.
Shahbaz
1
Jangan lakukan ini! Ini dapat mengubah kepemilikan file sumber yang Anda simpan dalam kondisi ini, ditambah kepemilikan .pro.user Anda, dan file konfigurasi Qt Creator lainnya. Saat Anda kembali menjalankan sebagai pengguna biasa, Anda akan mengalami kesalahan dan harus melewati beberapa rintangan untuk memulihkan semuanya. Saya belajar ini dengan cara yang sulit ...
BuvinJ
1
Menjalankan itu sebagai root adalah ide yang mengerikan. Sebagai gantinya, gunakan sumbernya, dan buat qtcreator gunakan sudo untuk meluncurkan gdb seperti ini. Mengharuskan Anda menjalankan qtcreator dari sudo tty dan auth sebelum Anda meluncurkan qtcreator, atau mengonfigurasi pengguna Anda untuk sudo tanpa kata sandi (tidak disarankan). Saya akan kode solusi yang lebih lengkap nanti.
Saya butuh 1-2 jam kode / debug tanpa pengetahuan sebelumnya tentang QT. Sebagian besar waktu dihabiskan menunggu kompilasi selesai
Saya akan menjalankan program dari terminal dengan server GDB (sebagai root) dan kemudian terhubung ke server dengan gdb dari QtCreator. Anda akan memulai gdbserver dengan sesuatu seperti ini:
$ sudo gdbserver host:2345 ./MyApp
Di sini, Anda meng-hosting server dengan port 2345. Anda juga dapat memeriksa apakah aplikasi Anda memang berjalan dengan UID 0.
$ sudo ps -u
Sekarang, di Qt Creator, buka Debug -> Mulai Debugging -> Lampirkan untuk Menjalankan Debug Server. Isi formulir ... yang paling penting adalah port dan alamat server. Saya memilih 127.0.0.1 dan 2345. Anda dapat memilih break at main untuk break di awal program. Server GDB tidak memulai program sampai Anda terhubung.
Tindakan berikut direkomendasikan di forum dukungan Qt:
Dalam Qt Creator, tambahkan perangkat Linux jarak jauh di Opsi -> Perangkat. Tetapkan alamatnya sebagai localhost dan pengguna sebagai root. Buat sepasang kunci otentikasi dan tempelkan kunci publik ke /root/.ssh/authorized_keys. Kemudian klon Desktop kit di Opsi -> Kit dan atur perangkat untuk kit baru ke perangkat yang Anda buat pada langkah sebelumnya.
Sekarang, ketika Anda mulai men-debug, Qt Creator akan secara otomatis menghubungkan ssh ke localhost sebagai root, mulai gdbserver dan lakukan debugging.
Ini berfungsi untuk berjalan tanpa debugging juga.
Mungkin Anda harus mengatur instalasi program Anda pada host jarak jauh, tapi itu cerita yang berbeda dan dilakukan secara berbeda untuk Qmake dan QBS.
Saya menyelesaikannya dengan memulai Qt Creator sebagai root.
Sekarang akan mendapatkan izin root ke aplikasi ketika saya kompilasi dan debug. Sekarang mungkin untuk men-debug aplikasi saya dengan privilege root.
sumber
Menjalankan itu sebagai root adalah ide yang mengerikan. Sebagai gantinya, gunakan sumbernya, dan buat qtcreator gunakan sudo untuk meluncurkan gdb seperti ini. Mengharuskan Anda menjalankan qtcreator dari sudo tty dan auth sebelum Anda meluncurkan qtcreator, atau mengonfigurasi pengguna Anda untuk sudo tanpa kata sandi (tidak disarankan). Saya akan kode solusi yang lebih lengkap nanti.
Saya butuh 1-2 jam kode / debug tanpa pengetahuan sebelumnya tentang QT. Sebagian besar waktu dihabiskan menunggu kompilasi selesai
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(); }
sumber
Saya akan menjalankan program dari terminal dengan server GDB (sebagai root) dan kemudian terhubung ke server dengan gdb dari QtCreator. Anda akan memulai gdbserver dengan sesuatu seperti ini:
Di sini, Anda meng-hosting server dengan port 2345. Anda juga dapat memeriksa apakah aplikasi Anda memang berjalan dengan UID 0.
Sekarang, di Qt Creator, buka Debug -> Mulai Debugging -> Lampirkan untuk Menjalankan Debug Server. Isi formulir ... yang paling penting adalah port dan alamat server. Saya memilih 127.0.0.1 dan 2345. Anda dapat memilih break at main untuk break di awal program. Server GDB tidak memulai program sampai Anda terhubung.
sumber
Tindakan berikut direkomendasikan di forum dukungan Qt:
Dalam Qt Creator, tambahkan perangkat Linux jarak jauh di Opsi -> Perangkat. Tetapkan alamatnya sebagai localhost dan pengguna sebagai root. Buat sepasang kunci otentikasi dan tempelkan kunci publik ke
/root/.ssh/authorized_keys
. Kemudian klon Desktop kit di Opsi -> Kit dan atur perangkat untuk kit baru ke perangkat yang Anda buat pada langkah sebelumnya.Sekarang, ketika Anda mulai men-debug, Qt Creator akan secara otomatis menghubungkan ssh ke localhost sebagai root, mulai gdbserver dan lakukan debugging.
Ini berfungsi untuk berjalan tanpa debugging juga.
Mungkin Anda harus mengatur instalasi program Anda pada host jarak jauh, tapi itu cerita yang berbeda dan dilakukan secara berbeda untuk Qmake dan QBS.
https://forum.qt.io/post/185983
sumber