เป็นไปได้ที่จะเรียกใช้แอปพลิเคชันของฉันโดยใช้สิทธิ์ของsudo
รูทเช่น:
sudo ./MyApp
เป็นไปได้หรือไม่ที่จะดีบักแอปพลิเคชัน Qt ของฉันโดยใช้สิทธิ์ของ root โดยใช้ QtCreator ฉันจะทำสิ่งนี้บนระบบ Ubuntu ได้อย่างไร
เป็นไปได้ที่จะเรียกใช้แอปพลิเคชันของฉันโดยใช้สิทธิ์ของsudo
รูทเช่น:
sudo ./MyApp
เป็นไปได้หรือไม่ที่จะดีบักแอปพลิเคชัน Qt ของฉันโดยใช้สิทธิ์ของ root โดยใช้ QtCreator ฉันจะทำสิ่งนี้บนระบบ Ubuntu ได้อย่างไร
คำตอบ:
Tools-> Options-> Environment
General
ภายใต้การ**System** Group
มีตัวเลือกTerminal
/usr/bin/xterm -e
ค่าเริ่มต้นจะถูกกำหนดให้ แทนที่ด้วยหรือ/usr/bin/xterm -e sudo
/usr/bin/gnome-terminal -x sudo
Apply
และปุ่มOK
Projects
เลือกRun
ตัวเลือก ภายใต้Run
กล่องกลุ่มRun in Terminal
เลือกข้อควรจำ: sudo
ตัวเลือกต้องอยู่ที่นั่น
แก้ไข /etc/sudoers
โดยใช้sudo visudo
ครั้งต่อไปเมื่อคุณเรียกใช้โปรแกรมจะมีการเรียกใช้ใหม่xterm
หรือgnome-terminal
ด้วย Super User Permissionและจะขอรหัสผ่านรูท
ฉันแก้ไขมันโดยเริ่มต้น Qt Creator เป็นรูท
sudo /usr/bin/qtcreator
ตอนนี้มันจะได้รับการอนุญาตรูทไปยังแอปพลิเคชันเมื่อฉันรวบรวมและดีบัก ตอนนี้เป็นไปได้ที่จะดีบักแอปพลิเคชันของฉันด้วยสิทธิ์พิเศษ
การทำเช่นนั้นในฐานะที่เป็นรากเป็นความคิดที่น่ากลัว ให้ใช้แหล่งที่มาและทำให้ qtcreator ใช้ sudo เพื่อเรียกใช้ gdb เช่นนี้ ต้องการให้คุณเรียกใช้ qtcreator จาก tty และ auth sudo ก่อนที่คุณจะเรียกใช้ qtcreator หรือกำหนดค่าผู้ใช้ของคุณสำหรับ sudo ที่ไม่มีรหัสผ่าน (ไม่แนะนำ) ฉันจะเขียนรหัสโซลูชันที่สมบูรณ์ยิ่งขึ้นในภายหลัง
ฉันใช้เวลา 1-2 ชั่วโมงในการเขียนรหัส / ตรวจแก้จุดบกพร่องโดยไม่มีความรู้เกี่ยวกับ QT เวลาส่วนใหญ่ที่ใช้รอการรวบรวมให้เสร็จสมบูรณ์
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();
}
ฉันจะเรียกใช้โปรแกรมจากเทอร์มินัลกับเซิร์ฟเวอร์ GDB (เป็นรูท) แล้วเชื่อมต่อกับเซิร์ฟเวอร์ด้วย gdb จาก QtCreator คุณจะเริ่ม gdbserver ด้วยสิ่งนี้:
$ sudo gdbserver host:2345 ./MyApp
ที่นี่คุณกำลังโฮสต์เซิร์ฟเวอร์ด้วยพอร์ต 2345 คุณสามารถตรวจสอบว่าแอปพลิเคชันของคุณทำงานด้วย UID 0 หรือไม่
$ sudo ps -u
ตอนนี้ใน Qt Creator ไปที่ Debug -> เริ่มการดีบั๊ก -> แนบไปกับการรัน Debug Server กรอกแบบฟอร์ม ... ที่สำคัญที่สุดคือที่อยู่พอร์ตและเซิร์ฟเวอร์ ฉันเลือก 127.0.0.1 และ 2345 คุณสามารถเลือกพักที่ main เพื่อหยุดพักที่จุดเริ่มต้นของโปรแกรม เซิร์ฟเวอร์ GDB ไม่ได้เริ่มโปรแกรมจนกว่าคุณจะเชื่อมต่อ
แนะนำให้ดำเนินการดังต่อไปนี้ในฟอรัมสนับสนุน Qt:
ใน Qt Creator ให้เพิ่มอุปกรณ์ Linux ระยะไกลในตัวเลือก -> อุปกรณ์ ตั้งค่าที่อยู่เป็น localhost และผู้ใช้เป็นรูต /root/.ssh/authorized_keys
สร้างคู่ของปุ่มตรวจสอบและวางคีย์สาธารณะเพื่อ จากนั้นโคลนชุดเดสก์ท็อปในตัวเลือก -> ชุดและตั้งค่าอุปกรณ์สำหรับชุดใหม่เป็นอุปกรณ์ที่คุณสร้างขึ้นในขั้นตอนก่อนหน้า
ตอนนี้เมื่อคุณเริ่มการดีบัก Qt Creator ควรเชื่อมต่อผ่าน ssh ไปยัง localhost เป็นรูทโดยอัตโนมัติเริ่ม gdbserver และทำการดีบั๊ก
มันทำงานได้โดยไม่ต้องดีบั๊ก
บางทีคุณควรตั้งค่าการติดตั้งโปรแกรมของคุณบนรีโมตโฮสต์ แต่นั่นเป็นเรื่องที่แตกต่างและทำแตกต่างกันสำหรับ Qmake และ QBS