การดีบักใน XCode ในฐานะรูท

ในโปรแกรมของฉันฉันต้องสร้างซ็อกเก็ตและผูกมันเพื่อฟังพอร์ต HTTP (80) โปรแกรมทำงานได้ดีเมื่อฉันเปิดใช้งานจากบรรทัดคำสั่งด้วย sudo ซึ่งจะทำให้สิทธิ์การรูทเพิ่มขึ้น การทำงานภายใต้ XCode ทำให้เกิดข้อผิดพลาด 'สิทธิ์ถูกปฏิเสธ' ในการเรียกใช้ฟังก์ชันการรวม (asio::ip::tcp::acceptor::bind())

ฉันจะแก้ไขจุดบกพร่องภายใต้ XCode ได้อย่างไร

ทั้งหมดนี้ทำได้ใน C++ และ boost.asio บน Mac OS X 10.5 พร้อม XCode 3.1.2


person Anton    schedule 23.06.2009    source แหล่งที่มา


คำตอบ (6)


อัปเดต: สำหรับ Xcode 4.5 และใหม่กว่า โปรดดูคำตอบนี้แทน


วิธีเดียวที่ฉันรู้ว่าต้องทำสิ่งที่คุณขอคือเรียกใช้ Xcode ในฐานะรูท

>> sudo /Developer/Applications/Xcode.app/Contents/MacOS/Xcode

เมื่อคุณใช้งานในฐานะ root แล้ว กระบวนการใดก็ตามที่เรียกใช้จาก Xcode ก็จะทำงานในฐานะ root ด้วยเช่นกัน โปรดทราบว่าหากคุณสร้างหรือแก้ไขไฟล์ใดๆ ไฟล์เหล่านั้นจะเป็นของ root ซึ่งหมายความว่าคุณจะต้อง chown ไฟล์เหล่านั้นก่อนที่คุณจะสามารถแก้ไขได้ในฐานะผู้ใช้ปกติของคุณก่อน

ฉันชอบวิธีที่ Xcode พูดว่า "เรียกใช้กระบวนการในฐานะรูท" แต่เท่าที่ฉันรู้ ไม่มีฟังก์ชันดังกล่าวให้ใช้งาน

โปรดทราบว่าคุณยังสามารถเรียกใช้แอปพลิเคชันภายในดีบักเกอร์บรรทัดคำสั่ง gdb เพื่อดีบักแอปพลิเคชันของคุณได้ วิ่ง

>> sudo gdb /path/to/my/application

จากนั้นคุณสามารถเปิด Xcode ไว้ แก้ไขได้ตามต้องการ และดีบักโปรแกรมของคุณภายใน gdb นี่คือสิ่งที่ฉันทำโดยทั่วไป

แก้ไข: ผู้อ่านจากอนาคต: ดูคำตอบจาก Alexander Stavonin; มันพูดถึงวิธีการทำเช่นนี้ หากคุณโอเคกับคีย์ ssh และเปิดใช้งานผู้ใช้รูทบนระบบของคุณ คำตอบของเขาก็คือคำตอบ

person BJ Homer    schedule 23.06.2009
comment
ขอบคุณ แต่ปัญหานี้กับเจ้าของไฟล์นั้นน่ารำคาญจริงๆ - person Anton; 23.06.2009
comment
น่าเสียดายที่วิธีการของ Alexander ดูเหมือนจะใช้งานไม่ได้กับ XCode4 ดังนั้นวิธี sudo ในคำตอบนี้ดูเหมือนจะเป็นวิธีเดียวที่ใช้งานได้ - person JosephH; 16.01.2012
comment
ผู้อ่านจากอนาคตไกล: ตอนนี้ Xcode มีตัวเลือกในตัว: ดูคำตอบของ Mike.R - person ReinstateMonica3167040; 07.04.2021

ใน Xcode 4.5 Product->Edit Scheme: ดูในแท็บ Info ใต้ Debug Process As และเลือก < em>รูท ตัวเลือก

person Mike.R    schedule 28.12.2012

Xcode สามารถเรียกใช้แอปพลิเคชันการดีบักในฐานะรูทได้ เพื่อจุดประสงค์นี้ ควรทำขั้นตอนต่อไปนี้:

  1. เปิดใช้งานผู้ใช้รูทสำหรับเครื่องท้องถิ่น

    ก. เรียกใช้ “Directory Utility” (/System/Library/CoreServices/ Directory Utility.app)

    ข. เลือก "เปิดใช้งานผู้ใช้รูท" จากเมนูแก้ไขและป้อนรหัสผ่านรูท

  2. เปิดใช้งานการบันทึกระยะไกล

    ก. ในการตั้งค่าระบบ… -> การแชร์ ให้ตรวจสอบการเข้าสู่ระบบระยะไกล ตัวเลือกนี้จะเปิด ssh demon

  3. สร้างคีย์สาธารณะ/ส่วนตัว ssh และคัดลอกคีย์สาธารณะในโฟลเดอร์ .ssh/authorized_keys สำหรับผู้ใช้รูท

    ก. เปิดเทอร์มินัลบนเครื่องท้องถิ่นแล้วพิมพ์ ssh-keygen -t rsa

    ข. ยอมรับตำแหน่งเริ่มต้นและพิมพ์รหัสผ่านสำหรับรูท

    ค. เข้าสู่ระบบด้วย root su - และสร้างไดเร็กทอรี ~/.ssh (~ == /var/root)

    ง. คัดลอกกุญแจสาธารณะไปที่รูท: cat ~/.ssh/id_rsa.pub | ssh root@localhost "cat - >> ~/.ssh/authorized_keys"

    จ. ตรวจสอบว่าทุกอย่างเรียบร้อยดีหรือไม่ พิมพ์ ssh root@localhost ไม่ควรถามรหัสผ่านรูท

  4. เปิดใช้งานการดีบักระยะไกลผ่าน ssh ใน Xcode

    ก. เลือก "รับข้อมูล" จากเมนูแบบเลื่อนลงใน "ปฏิบัติการ"

    ข. ในการตั้งค่า "การแก้ไขจุดบกพร่อง" ให้ทำเครื่องหมายที่ "Debug executable remotely via ssh" และใส่ root@localhost เป็นข้อมูล "เชื่อมต่อกับ"

  5. ตอนนี้ทุกอย่างควรจะโอเคแล้ว ☺

จากบล็อก

person Alexander Stavonin    schedule 08.12.2009
comment
ดูเหมือนว่าฉันไม่พบ "Debug executable จากระยะไกลผ่าน ssh" บน Xcode4 ได้ ใช่ไหม? - person Yantao Xie; 13.10.2011
comment
น่าเสียดายที่ฉันไม่รู้ ในขณะนี้ทางออกที่ดีที่สุดสำหรับฉันคือ GBD ในกรณีของการดีบักรูต - person Alexander Stavonin; 21.11.2011

XCode ไม่รองรับการดีบักระยะไกลอีกต่อไป ส่งผลให้คำตอบเหล่านี้ส่วนใหญ่ล้าสมัยแล้ว

สำหรับการดีบักโปรแกรมในฐานะรูทตอนนี้เป็นเรื่องง่าย ใต้เมนูผลิตภัณฑ์ ให้ใช้ "แก้ไขโครงร่าง…" และในบานหน้าต่าง "ข้อมูล" ของโครงร่าง "เรียกใช้" ของคุณ ให้เลือก "กระบวนการดีบักในฐานะรูท" คุณจะต้องรับรองความถูกต้องหนึ่งครั้ง

ตั้งแต่ Xcode 4.5 ฉันได้รับข้อผิดพลาดแปลก ๆ จนกระทั่งฉันค่อนข้าง Xcode และรีสตาร์ท

person bitmusher    schedule 01.10.2012

ดีบักในฐานะรูทผ่าน SSH

แก้ไขปฏิบัติการที่ใช้งานอยู่ -> การดีบัก -> การดีบักปฏิบัติการได้จากระยะไกลผ่าน SSH

person Cheng    schedule 20.11.2009
comment
ฉันไม่สามารถทำให้มันทำงานได้ สิ่งที่ฉันได้ตั้งค่าไว้ในหน้านี้: เมื่อใช้ GDB Use Pipe สำหรับอินพุต/เอาท์พุตมาตรฐาน, Checked Debug ปฏิบัติการได้จากระยะไกลผ่าน SSH, เชื่อมต่อกับ: [email protected] , Unchecked Start executable หลังจากเริ่มดีบักเกอร์ และเมื่อฉันใช้งานแอป มันจะแสดงข้อความโต้ตอบกับการตรวจสอบสิทธิ์ SSH แต่การป้อนรหัสผ่านของฉันเนื่องจากข้อความรหัสผ่านทำให้การตรวจสอบสิทธิ์ล้มเหลว ฉันยังพยายามที่จะใช้ชื่อผู้ใช้ของฉัน แต่มันก็ไม่ได้ผลเหมือนกัน และที่สำคัญ แอปไม่เริ่มทำงานเลย ผมทำอะไรผิดหรือเปล่า? - person Anton; 21.11.2009

หากคุณต้องการดีบักเว็บเซิร์ฟเวอร์ที่ทำงานบนพอร์ต 443 คุณสามารถรันบนพอร์ต 8443 ในบัญชีปกติของคุณแทน จากนั้นทำ: sudo ssh user@localhost -L 443:localhost:8443 -N

จากนั้นคุณยังคงสามารถติดต่อแอปพลิเคชันของคุณบนพอร์ตที่ถูกต้องได้ แต่มีข้อดีของการเรียกใช้แอปพลิเคชันในฐานะผู้ใช้ปกติ

person Michael Grønager    schedule 14.03.2012