1 คะแนน โดย GN⁺ 2024-11-28 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • การใช้งาน 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 ความคิดเห็น

 
GN⁺ 2024-11-28
ความคิดเห็นจาก Hacker News
  • ผู้ใช้รายหนึ่งแชร์วิธีย่อไฟล์ และอธิบายวิธีตั้งค่าด้วย RustPython และ scrapscript

    • ใช้คำสั่ง git clone เพื่อโคลน RustPython และ scrapscript แล้วบิลด์ด้วย cargo build --release
    • ดาวน์โหลดไฟล์ interesting.sh และให้สิทธิ์รัน
    • ใช้คำสั่ง nix run nixpkgs#creduce เพื่อย่อไฟล์
  • มีการแนะนำให้ใช้ C-Reduce และแนะนำให้ลองใช้เครื่องมือชื่อ Shrinkray ควบคู่กันด้วย

    • Shrinkray ไม่ขึ้นกับฟอร์แมต และยังมีประโยชน์แม้ในกรณีที่ C-Reduce ทำงานได้ไม่ดี
  • มีการกล่าวถึงว่ามีการเผยแพร่บทความวิชาการเกี่ยวกับ C-Reduce ในปี 2012

    • บทความของ John Regehr et al. อธิบายวิธีการทำงานของ C-Reduce
  • มีคนบอกว่าเพิ่งรู้จัก C-Reduce เป็นครั้งแรก และรู้สึกตื่นเต้นแบบเดียวกับตอนค้นพบ git bisect ครั้งแรก

    • ตั้งใจจะจำเอาไว้เพื่อใช้ในอนาคตเมื่อจำเป็น
  • มีคนเจอบทความที่แสดงตัวอย่างของ C-Reduce แต่ยังเข้าใจได้ยากว่ามันตัดสินใจอย่างไรในแต่ละรอบว่าจะลบอะไรออก

    • คาดว่าน่าจะมีกระบวนการ tokenization แต่ก็ยังยากที่จะเข้าใจว่ามันทำงานข้ามภาษาโปรแกรมต่าง ๆ อย่างไร
  • มีการประเมินว่า C-Reduce มีประโยชน์มาก

    • ใช้ CSmith เพื่อสร้างโปรแกรมทดสอบแบบสุ่ม และเมื่อเกิดการแครชก็ใช้ C-Reduce เพื่อลดปัญหาให้อัตโนมัติ
  • delta debugging ไม่ใช่แนวคิดใหม่

    • อิมพลีเมนเทชัน delta debugging ที่ชื่อว่า "delta" มีมานานกว่า 19 ปีแล้ว และเปิดเป็นโอเพนซอร์ส
    • ในบทนำของ LLVM ก็มีการกล่าวถึงว่าเป็นเครื่องมือ delta debugging มาตรฐาน
  • มันทำงานกับ SQL ได้ดีเช่นกัน และมีการใช้งานอยู่ในที่ทำงาน

    • รู้จักผ่าน SQLancer
  • หากไม่มีคำอธิบายว่าทำไมมันถึงใช้ได้กับภาษาที่ไม่ใช่ C ก็เชื่อได้ยาก

    • ยิ่งสับสนกว่าเดิมเพราะมันไม่ได้ใช้ LLM
  • มีการแนะนำ cvise ว่าเป็นเครื่องมือสืบทอดที่ดีของ C-Reduce

    • เคยใช้หลายครั้งเพื่อลดโปรแกรมแอสเซมบลีให้เหลือชุดที่เล็กที่สุด และเป็นโปรแกรมที่มีประโยชน์มาก