-
แนะนำ rr
- rr เป็นเครื่องมือดีบักสำหรับ C/C++ บน Linux ที่ออกแบบมาเพื่อเสริม gdb
- สามารถบันทึกความล้มเหลวเพียงครั้งเดียว แล้วนำบันทึกนั้นมาดีบักซ้ำได้หลายครั้ง
- ดีบักได้โดยทำให้การรันเดิมเกิดซ้ำแบบเดียวกันทุกครั้ง
- มอบความสามารถในการรันย้อนกลับอย่างมีประสิทธิภาพผ่าน gdb
-
ความสามารถของ rr
- โอเวอร์เฮดต่ำ
- รองรับการบันทึกและเล่นซ้ำแอปพลิเคชันหลากหลายประเภท (Firefox, Chrome, QEMU, LibreOffice เป็นต้น)
- สามารถบันทึก เล่นซ้ำ และดีบักเวิร์กโหลดแบบหลายโปรเซสได้
- รองรับการทำสคริปต์ gdb และการผสานรวมกับ IDE
- ไฟล์ trace ที่ทนทานและบีบอัดแล้ว สามารถย้ายข้ามเครื่องได้
- มีโหมด chaos สำหรับจำลองบั๊กที่เกิดเป็นครั้งคราวให้เกิดซ้ำได้
-
ประสบการณ์การดีบักด้วย rr
- บันทึกแอปพลิเคชัน:
rr record /your/application --args...
- ดีบักการรันที่บันทึกไว้:
rr replay
- ดีบัก trace ที่บันทึกไว้แบบกำหนดผลลัพธ์ได้แน่นอน
- ใช้คำสั่ง gdb ทั่วไปได้
- สามารถย้อนกลับการรันเพื่อไปยังจุดที่มีปัญหาได้อย่างรวดเร็ว
-
วิดีโอ
- วิดีโอเดโมการบันทึกและเล่นซ้ำ Firefox
- วิดีโอที่อธิบายความสามารถพื้นฐานของ rr อย่างละเอียด
- วิดีโอการบรรยายเชิงเทคนิคขั้นสูงโดย Robert O'Callahan
-
เริ่มต้นใช้งาน
- แนะนำให้ build จากซอร์ส หากแพ็กเกจใช้งานไม่ได้
- มีวิธีติดตั้งสำหรับ Fedora และ Ubuntu
-
เบื้องหลังและแรงจูงใจ
- พัฒนาขึ้นเพื่อให้การดีบักความล้มเหลวที่เกิดเป็นครั้งคราวทำได้ง่ายขึ้น
- การเล่นซ้ำแบบกำหนดผลลัพธ์ได้แน่นอนช่วยให้ข้อมูลที่ได้ระหว่างการดีบักยังคงใช้ได้
- การรันย้อนกลับช่วยให้กระบวนการดีบักง่ายขึ้น
- rr ถูกใช้งานเป็นประจำในหลายโครงการทั้งขนาดใหญ่และเล็ก
-
rr ทำงานอย่างไร
- บันทึกโปรเซสใน user space บน Linux และจับทุกอินพุตที่มาจากเคอร์เนล
- ระหว่างการเล่นซ้ำ จะรับประกัน control flow ระดับคำสั่ง รวมถึงเนื้อหาของหน่วยความจำและรีจิสเตอร์
- layout ของหน่วยความจำ, address ของอ็อบเจ็กต์, ค่ารีจิสเตอร์ ฯลฯ จะคงเดิมเหมือนเดิม
- มีพลังมากยิ่งขึ้นเมื่อใช้ร่วมกับ fuzzer และตัวฉีดความผิดพลาดแบบสุ่ม
-
บริบทของ rr
- การดีบักแบบบันทึกและเล่นซ้ำเป็นแนวคิดที่มีมานานแล้ว
- เป้าหมายการออกแบบมุ่งเน้นไปที่ Firefox
- ความสามารถในการนำไปใช้งานจริง: รันได้บนเคอร์เนล Linux ทั่วไป โดยไม่ต้องเปลี่ยนการตั้งค่าระบบ
- โอเวอร์เฮดขณะรันต่ำ
- การออกแบบเรียบง่าย: หลีกเลี่ยงเทคนิคที่ซับซ้อน
-
ข้อจำกัด
- จำลองเครื่องแบบ single-core
- ไม่สามารถบันทึกโปรเซสที่แชร์หน่วยความจำกับภายนอก tree ของการบันทึกได้
- ต้องใช้ CPU x86 สมัยใหม่ หรือ CPU ARM บางรุ่น
- จำเป็นต้องรู้จักทุก system call ที่โปรเซสซึ่งถูกบันทึกใช้งาน
- ต้องรองรับการเปลี่ยนแปลงของเคอร์เนล การอัปเดต system library และตระกูล CPU ใหม่
-
แหล่งอ้างอิงเพิ่มเติม
- รายงานทางเทคนิคฉบับขยาย
- วิกิของ rr
- สามารถถามคำถามได้ผ่าน mailing list หรือใน #rr บน chat.mozilla.org
สรุปโดย GN⁺
- rr เป็นเครื่องมือทรงพลังสำหรับการดีบัก C/C++ บน Linux ที่ช่วยเพิ่มประสิทธิภาพการดีบักอย่างมากด้วยการเล่นซ้ำแบบกำหนดผลลัพธ์ได้แน่นอน
- รองรับทั้งแอปพลิเคชันหลากหลายประเภทและเวิร์กโหลดหลายโปรเซส พร้อมโอเวอร์เฮดต่ำ ทำให้ใช้งานได้จริง
- ความสามารถในการรันย้อนกลับช่วยให้กระบวนการดีบักง่ายขึ้นมาก
- สามารถใช้ดีบักแอปพลิเคชันซับซ้อนอย่าง Firefox ได้ จึงมีประโยชน์ในภาพรวม
- เครื่องมือที่มีความสามารถใกล้เคียงกันได้แก่ gdb และ Valgrind
1 ความคิดเห็น
ความคิดเห็นบน Hacker News