แก้ไขข้อบกพร่องแอปพลิเคชัน Qt บน Ubuntu ที่ได้รับอนุญาตการใช้ root โดยใช้ผู้สร้าง qt


10

เป็นไปได้ที่จะเรียกใช้แอปพลิเคชันของฉันโดยใช้สิทธิ์ของsudoรูทเช่น:

sudo ./MyApp

เป็นไปได้หรือไม่ที่จะดีบักแอปพลิเคชัน Qt ของฉันโดยใช้สิทธิ์ของ root โดยใช้ QtCreator ฉันจะทำสิ่งนี้บนระบบ Ubuntu ได้อย่างไร

คำตอบ:


14
  1. ไปที่ Tools-> Options-> Environment
  2. ในแท็บGeneralภายใต้การ**System** GroupมีตัวเลือกTerminal
  3. /usr/bin/xterm -eค่าเริ่มต้นจะถูกกำหนดให้ แทนที่ด้วยหรือ/usr/bin/xterm -e sudo/usr/bin/gnome-terminal -x sudo
  4. กดApplyและปุ่มOK
  5. ภายใต้ตัวเลือกโหมดคลิกที่ProjectsเลือกRunตัวเลือก ภายใต้Runกล่องกลุ่มRun in Terminalเลือก

ข้อควรจำ: sudoตัวเลือกต้องอยู่ที่นั่น

แก้ไข /etc/sudoersโดยใช้sudo visudo

ครั้งต่อไปเมื่อคุณเรียกใช้โปรแกรมจะมีการเรียกใช้ใหม่xtermหรือgnome-terminal ด้วย Super User Permissionและจะขอรหัสผ่านรู


2
นี่คือทางออกที่ถูกต้อง
Ray

2
เราควรจะเพิ่มอะไรใน / etc / sudoers
Necktwi

4
ไม่ทำงานสำหรับฉันหลังจากป้อนรหัสผ่าน sudo แอปพลิเคชันรายงานผลลัพธ์ "การแก้ไขข้อบกพร่องเสร็จสิ้น" ไม่มี breakponts ตัวใดตัวหนึ่งหยุดพักจริงๆ

สำหรับเร็กคอร์ด "ตัวเลือกโหมด" เป็นแผงปุ่มซ้ายสุดพร้อมยินดีต้อนรับที่ด้านบนสุด
เอริค

1

ฉันแก้ไขมันโดยเริ่มต้น Qt Creator เป็นรูท

sudo /usr/bin/qtcreator

ตอนนี้มันจะได้รับการอนุญาตรูทไปยังแอปพลิเคชันเมื่อฉันรวบรวมและดีบัก ตอนนี้เป็นไปได้ที่จะดีบักแอปพลิเคชันของฉันด้วยสิทธิ์พิเศษ


3
นั่นเป็นสิ่งที่โง่มาก ๆที่ต้องทำ ฉันไม่ได้พยายามที่จะเป็นที่น่ารังเกียจ โง่ในแง่ที่ว่ามันไม่ใช่เรื่องที่ฉลาด และฉันมั่นใจว่าคนส่วนใหญ่จะไม่ทำเช่นนี้
iharob


1
อย่าเป็นผู้ใช้ windows อย่าเรียกใช้ทุกอย่างในฐานะรูท
Shahbaz

1
อย่าทำอย่างนี้! สิ่งนี้สามารถเปลี่ยนความเป็นเจ้าของของไฟล์ต้นฉบับที่คุณบันทึกภายใต้เงื่อนไขนี้รวมถึงการเป็นเจ้าของ. pro.user ของคุณและไฟล์การกำหนดค่า Qt Creator อื่น ๆ เมื่อคุณเปลี่ยนกลับไปใช้งานในฐานะผู้ใช้ทั่วไปคุณจะพบข้อผิดพลาดและต้องข้ามห่วงบางอย่างเพื่อกู้คืนทุกอย่าง ฉันได้เรียนรู้วิธีนี้อย่างหนัก ...
35717

1

การทำเช่นนั้นในฐานะที่เป็นรากเป็นความคิดที่น่ากลัว ให้ใช้แหล่งที่มาและทำให้ 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(); }


1

ฉันจะเรียกใช้โปรแกรมจากเทอร์มินัลกับเซิร์ฟเวอร์ 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 ไม่ได้เริ่มโปรแกรมจนกว่าคุณจะเชื่อมต่อ


0

แนะนำให้ดำเนินการดังต่อไปนี้ในฟอรัมสนับสนุน Qt:

ใน Qt Creator ให้เพิ่มอุปกรณ์ Linux ระยะไกลในตัวเลือก -> อุปกรณ์ ตั้งค่าที่อยู่เป็น localhost และผู้ใช้เป็นรูต /root/.ssh/authorized_keysสร้างคู่ของปุ่มตรวจสอบและวางคีย์สาธารณะเพื่อ จากนั้นโคลนชุดเดสก์ท็อปในตัวเลือก -> ชุดและตั้งค่าอุปกรณ์สำหรับชุดใหม่เป็นอุปกรณ์ที่คุณสร้างขึ้นในขั้นตอนก่อนหน้า

ตอนนี้เมื่อคุณเริ่มการดีบัก Qt Creator ควรเชื่อมต่อผ่าน ssh ไปยัง localhost เป็นรูทโดยอัตโนมัติเริ่ม gdbserver และทำการดีบั๊ก

มันทำงานได้โดยไม่ต้องดีบั๊ก

บางทีคุณควรตั้งค่าการติดตั้งโปรแกรมของคุณบนรีโมตโฮสต์ แต่นั่นเป็นเรื่องที่แตกต่างและทำแตกต่างกันสำหรับ Qmake และ QBS

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.