2 คะแนน โดย GN⁺ 2023-11-12 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

แนะนำดีบักเกอร์ Spray

  • Spray เป็นดีบักเกอร์ที่เรียบง่ายและเข้าใจง่ายสำหรับโค้ด C
  • มีความสามารถในการควบคุมการทำงานของโปรแกรมที่กำลังรัน รวมถึงตรวจสอบและแก้ไขสถานะได้
  • เริ่มพัฒนาด้วยเป้าหมายเพื่อสำรวจความสงสัยเกี่ยวกับการทำงานภายในของดีบักเกอร์ และหาวิธีทำให้การดีบักเข้าถึงได้ง่ายขึ้น

ฟีเจอร์หลัก

  • ตั้ง breakpoint ตามฟังก์ชัน, บรรทัดในไฟล์, หรือแอดเดรส
  • แสดงผลและตั้งค่าค่าของตัวแปร, แอดเดรสหน่วยความจำ, และรีจิสเตอร์
  • มี syntax highlighting สำหรับ C, backtrace และการรันทีละขั้น
  • มีฟีเจอร์ฟิลเตอร์สำหรับกำหนดรูปแบบการแสดงผลของคำสั่ง

โรดแมปการพัฒนา

  • แสดงผลและแก้ไข struct ที่ซับซ้อน
  • syntax highlighting สำหรับ struct ที่ซับซ้อน
  • backtrace ที่อิงกับ DWARF แทน frame pointer
  • รองรับ inline function, การโหลดไลบรารีภายนอก, และการดักจับ signal ที่ส่งไปยังโปรแกรมที่กำลังดีบัก

วิธีติดตั้ง

  • บางส่วนของฟรอนต์เอนด์ Spray เขียนด้วย Scheme และคอมไพล์เป็น C ผ่าน CHICKEN Scheme
  • ต้องติดตั้ง CHICKEN และเนื่องจากมี dependency กับ libdwarf จึงต้องติดตั้งก่อน
  • โคลนรีโพซิทอรีและติดตั้ง Spray ด้วยคำสั่ง make
  • เพิ่มเข้า $PATH เพื่อให้ใช้งานได้เหมือนคำสั่งทั่วไป

วิธีใช้ Spray

  • ไบนารีที่จะดีบักต้องเปิดใช้ข้อมูลดีบักไว้ และต้องปิดการ optimize
  • ต้องคอมไพล์โปรแกรมโดยใช้ Clang
  • ส่งชื่อไบนารีที่จะดีบักเป็นอาร์กิวเมนต์ตัวแรก และส่งอาร์กิวเมนต์ของโปรแกรมที่จะดีบักต่อจากนั้น

คำสั่ง

การอ่านและเขียนค่า

  • แสดงผลหรือตั้งค่าค่าของตัวแปร รีจิสเตอร์ และแอดเดรส
  • ชื่อรีจิสเตอร์ใช้คำนำหน้า % ตามไวยากรณ์แอสเซมบลีแบบ AT&T
  • ค่าสามารถระบุได้เป็นเลขฐาน 10 หรือฐาน 16

Breakpoint

  • ตั้งและลบ breakpoint ตามฟังก์ชัน บรรทัดในไฟล์ หรือแอดเดรส
  • ใช้คำสั่ง continue เพื่อรันต่อไปจนถึง breakpoint ถัดไป

การรันทีละขั้น

  • ไปยังบรรทัดถัดไป, เข้าไปในฟังก์ชัน, หรือออกจากฟังก์ชันปัจจุบัน
  • ไปยังคำสั่งถัดไป และแสดง backtrace จากตำแหน่งปัจจุบัน

ฟิลเตอร์

  • สามารถใช้ฟิลเตอร์เพื่อเปลี่ยนรูปแบบการแสดงผล
  • แนบฟิลเตอร์ต่อท้ายคำสั่ง print และ set เพื่อเปลี่ยนรูปแบบการแสดงผล

วิธีมีส่วนร่วม

  • ยินดีรับทุกการมีส่วนร่วม โดยควรรัน local test suite ก่อนส่งพูลรีเควสต์เพื่อยืนยันว่าไม่ได้ทำให้ฟีเจอร์เสียหาย
  • สามารถมองข้ามการทดสอบที่ล้มเหลวจากข้อผิดพลาดแบบ off-by-one กับค่าบางค่าได้

เอกสารอ้างอิง

  • บล็อกซีรีส์ "Writing a Linux Debugger" ของ Sy Brand, มาตรฐาน DWARF 5, เอกสารของ libdwarf และโพสต์ "How debuggers work" ของ Eli Bendersky

ความเห็นของ GN⁺

ประเด็นสำคัญที่สุดของบทความนี้คือ Spray เป็นดีบักเกอร์ที่เป็นมิตรต่อผู้ใช้สำหรับโค้ด C และมุ่งเน้นการทำให้การดีบักเข้าถึงได้ง่ายขึ้น ด้วยโครงสร้างและคำสั่งที่เข้าใจง่ายแม้สำหรับวิศวกรซอฟต์แวร์ระดับเริ่มต้น จึงช่วยให้จัดการงานดีบักที่ซับซ้อนได้สะดวกยิ่งขึ้น นอกจากนี้ยังมีการนำเสนอโรดแมปการพัฒนาและวิธีมีส่วนร่วมไว้อย่างชัดเจน ทำให้เป็นโอกาสที่น่าสนใจสำหรับนักพัฒนาที่ต้องการเข้าร่วมโครงการโอเพนซอร์ส

1 ความคิดเห็น

 
GN⁺ 2023-11-12
ความคิดเห็นจาก Hacker News
  • โค้ดของโปรแกรมเมอร์วัยรุ่นคนนี้สะอาดเป็นพิเศษ สม่ำเสมอ และแยกเป็นโมดูลได้ดีมาก โปรเจ็กต์แบบนี้ต้องอาศัยความรู้ที่ไม่ธรรมดาเกี่ยวกับ binary format และ kernel API แม้แต่นักเขียนโปรแกรม "ระดับสูง" หลายคนก็อาจลำบากที่จะสร้างสิ่งแบบนี้ได้แม้ในระดับแนวคิดก็ตาม

    • สงสัยว่าเด็กอายุ 17 เรียนรู้ความรู้พวกนี้มาได้อย่างไร จากหนังสือ เพื่อนร่วมวงการ ชมรมเขียนโปรแกรม หรือพ่อแม่ที่เป็นโปรแกรมเมอร์หรือไม่?
  • การได้อ่านโค้ดของโปรแกรมเมอร์อายุน้อยเป็นเรื่องน่าสนใจ แม้ประสบการณ์จะยังน้อย แต่ก็เห็นได้ว่าพวกเขาออกแบบด้วยความรู้ในระดับสูงพอสมควร ดูเหมือนผู้เขียนจะเรียนรู้ได้เร็ว และผลงานจากการทำงาน 6 เดือนก็น่าประทับใจมาก

  • ชื่นชมในระดับความทุ่มเทแบบนี้ ขอแนะนำให้เข้าร่วมโปรแกรมอย่าง Google Summer of Code, KDE Season of Code, Linux Foundation LFX และ X.org EVoC เพราะมีปัญหาน่าสนใจให้ทำอีกมาก ตอนเป็นนักเรียนอยากรู้จักโปรแกรมพวกนี้ตั้งแต่ตอนนั้น ตอนนี้มีงานประจำเต็มเวลาแล้วเลยไม่มีเวลามีส่วนร่วมกับโอเพนซอร์ส

  • พอดูโปรเจ็กต์ครั้งแรกก็รู้สึกว่าจัดระเบียบมาอย่างดี น่าชื่นชม

    • สงสัยว่าทำโปรแกรมมานานแค่ไหนแล้ว และเริ่มจากภาษาอะไร มีนักพัฒนาที่อายุมากกว่าคุณหลายสิบปีจำนวนมากที่ยังเขียน Makefile ไม่เป็น
    • สงสัยว่าการใช้อีโมจิแบบ inline ในซอร์สโค้ดเป็นเทรนด์ใหม่ หรือเป็นการตั้งใจให้ระวังเรื่องการป้อนข้อมูลที่ไม่ใช่ ASCII กันแน่
  • ขอแสดงความยินดีกับโปรเจ็กต์และขอให้โชคดี คอมไพเลอร์เป็นหนึ่งในหัวข้อแรก ๆ ที่ทำให้สนใจการคอมพิวเตอร์

    • มีหนังสือเล่มหนึ่งที่อ่านซ้ำมาหลายครั้ง และตอนนี้เปิดให้อ่านฟรีแล้ว แม้จะเป็นหนังสือเกี่ยวกับส่วนของคอมไพเลอร์ แต่ก็น่าจะน่าสนใจสำหรับการดีบักด้วยเช่นกัน
  • นี่แสดงให้เห็นว่าเด็กอายุ 17 ก็ยังรู้จัก CD อยู่เหมือนกัน ดังนั้นไอคอนบันทึกที่เป็นฟลอปปีดิสก์อาจยังไม่ล้าสมัยเสียทีเดียว

  • ความรู้และความเป็นผู้ใหญ่ที่แสดงออกมาในวัย 17 นั้นน่าประทับใจ หัวข้อที่ศึกษาและนำมาใช้เป็นสิ่งที่คาดหวังได้ในระดับมหาวิทยาลัย และโปรเจ็กต์นี้ก็น่าจะอยู่ในระดับหลักสูตรบัณฑิตศึกษา ขอให้ประสบความสำเร็จในเส้นทางอาชีพ

  • จำได้ว่าเคยใช้ Turbo Pascal เขียนไลบรารีกราฟิก 2D ตอนยังเด็ก สมัยก่อนที่จะค้นพบอินเทอร์เน็ต มันเลยจบลงแค่เป็นความสนุกส่วนตัว แต่คิดว่าคุณทำได้ดีแล้วที่สร้างบางอย่างให้คนอื่นได้เห็น โค้ดสะอาด คอมเมนต์ดี และ README ก็ชัดเจน

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

  • สงสัยว่าทำไมถึงเว้นวรรคระหว่างชื่อฟังก์ชันกับอาร์กิวเมนต์ ในฐานะคนที่อ่านโค้ด C มา 18 ปี มันให้ความรู้สึกแปลกตาอยู่พอสมควร

    • ฉันชอบสไตล์ BSD และถ้าใช้ระบบ BSD ก็ขอแนะนำให้ดู man style แล้วลองใช้สไตล์นั้นดู