-
การใช้งาน C-Reduce
- C-Reduce เป็นเครื่องมือที่ Regehr และเพื่อนร่วมงานพัฒนาขึ้น เพื่อใช้ย่อ reproducers ของบั๊กในคอมไพเลอร์ C ให้เล็กลง
- ตัวอย่างเช่น มีประโยชน์เมื่อคุณต้องการย่อไฟล์ C ขนาด 10,000 บรรทัดที่ทำให้เกิดบั๊กใน Clang
- C-Reduce ไม่ได้จำกัดอยู่แค่ภาษา C เท่านั้น และสามารถนำไปใช้กับภาษาอื่น ๆ ได้หลากหลาย
-
ข้อกำหนดของ C-Reduce
- ต้องมีเงื่อนไขที่เป็น deterministic
- การมี reproducer ที่ทำงานได้เร็วจะช่วยให้การย่อทำได้รวดเร็วยิ่งขึ้น
- ต้องมีไฟล์ซอร์สที่แก้ไขเปลี่ยนแปลงได้อย่างน้อยหนึ่งไฟล์ที่ C-Reduce สามารถย่อได้
-
กรณีบั๊กของ RustPython
- เพื่อรายงานบั๊กที่เกิดขึ้นใน RustPython จึงเขียนสคริปต์
interesting.sh
- สคริปต์จะรัน RustPython แล้วค้นหาข้อความผิดพลาดที่กำหนดด้วย
grep
-
การรัน C-Reduce
- รัน C-Reduce แล้วสามารถย่อขนาดไฟล์ลงได้มากกว่า 50%
- ใช้ออปชัน
--not-c เพื่อหลีกเลี่ยง pass ที่ออกแบบมาเฉพาะสำหรับ C และปรับให้เหมาะกับ Python
- ผลลัพธ์คือสามารถย่อไฟล์ได้อย่างรวดเร็วและง่ายดาย
-
บทสรุป
- C-Reduce นำไปใช้ได้กับหลายภาษา และมีประโยชน์ในการย่อไฟล์ได้อย่างรวดเร็วและมีประสิทธิภาพ
- เป็นบล็อกโอเพนซอร์ส จึงสามารถเสนอการแก้ไขได้หากพบข้อผิดพลาด
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ผู้ใช้รายหนึ่งแชร์วิธีย่อไฟล์ และอธิบายวิธีตั้งค่าด้วย RustPython และ scrapscript
git cloneเพื่อโคลน RustPython และ scrapscript แล้วบิลด์ด้วยcargo build --releaseinteresting.shและให้สิทธิ์รันnix run nixpkgs#creduceเพื่อย่อไฟล์มีการแนะนำให้ใช้ C-Reduce และแนะนำให้ลองใช้เครื่องมือชื่อ Shrinkray ควบคู่กันด้วย
มีการกล่าวถึงว่ามีการเผยแพร่บทความวิชาการเกี่ยวกับ C-Reduce ในปี 2012
มีคนบอกว่าเพิ่งรู้จัก C-Reduce เป็นครั้งแรก และรู้สึกตื่นเต้นแบบเดียวกับตอนค้นพบ git bisect ครั้งแรก
มีคนเจอบทความที่แสดงตัวอย่างของ C-Reduce แต่ยังเข้าใจได้ยากว่ามันตัดสินใจอย่างไรในแต่ละรอบว่าจะลบอะไรออก
มีการประเมินว่า C-Reduce มีประโยชน์มาก
delta debugging ไม่ใช่แนวคิดใหม่
มันทำงานกับ SQL ได้ดีเช่นกัน และมีการใช้งานอยู่ในที่ทำงาน
หากไม่มีคำอธิบายว่าทำไมมันถึงใช้ได้กับภาษาที่ไม่ใช่ C ก็เชื่อได้ยาก
มีการแนะนำ cvise ว่าเป็นเครื่องมือสืบทอดที่ดีของ C-Reduce