2 คะแนน โดย GN⁺ 2023-11-12 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Spray คือ ดีบักเกอร์ขนาดเล็กสำหรับโค้ด C ที่คงความสามารถไว้ให้เรียบง่ายและเข้าใจง่าย เป็นเครื่องมือสำหรับควบคุมโปรแกรมที่กำลังรันอยู่ รวมถึงตรวจสอบและแก้ไขสถานะของมัน
  • ความสามารถที่รองรับได้แก่ เบรกพอยต์ ตามฟังก์ชัน บรรทัดในไฟล์ และแอดเดรส, การแสดงผลและตั้งค่าตัวแปร หน่วยความจำตามแอดเดรส และรีจิสเตอร์, การไฮไลต์ไวยากรณ์ C, backtrace, การสเต็ปทีละคำสั่ง ทีละฟังก์ชัน และทีละบรรทัด, รวมถึงตัวกรองรูปแบบผลลัพธ์ของคำสั่ง
  • คำสั่ง REPL ได้แก่ print/set, break/delete, continue, next, step, leave, inst, backtrace สำหรับควบคุมการทำงานและอ่าน/เขียนค่า
  • หลัง print และ set สามารถต่อฟิลเตอร์ด้วย pipe (|) ได้ โดยใช้ dec, hex, addr, bits, bytes, deref/* เพื่อแสดงค่า 64 บิตเดียวกันในรูปแบบต่าง ๆ หรือทำการ dereference แอดเดรส
  • การบิลด์ต้องใช้ CHICKEN Scheme และ libdwarf จากนั้นโคลนให้รวม submodule แล้วรัน make ก็จะได้ไบนารี spray ในไดเรกทอรี build
  • ไบนารีเป้าหมายที่จะดีบักต้องคอมไพล์พร้อมข้อมูลดีบักด้วยแฟลก -g และควรปิดการทำ optimization เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด
  • Spray ถูก ทดสอบกับ Clang เท่านั้น และเนื่องจากคอมไพเลอร์แต่ละตัวสร้างข้อมูลดีบักสำหรับโค้ดเดียวกันต่างกัน โปรแกรมที่จะดีบักด้วย Spray จึงต้องคอมไพล์ด้วย clang
  • ในโรดแมปยังมีงานที่เหลือ เช่น การแสดงผลและแก้ไขโครงสร้างข้อมูลแบบประกอบ, การไฮไลต์ไวยากรณ์ของโครงสร้างข้อมูลแบบประกอบ, backtrace แบบอิง DWARF แทน frame pointer, inline function, การโหลดไลบรารีภายนอก, และการดักจับสัญญาณที่ส่งไปยังโปรแกรมเป้าหมายที่กำลังดีบัก

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

 
GN⁺ 2023-11-12
ความคิดเห็นบน Hacker News
  • โดยเฉพาะอย่างยิ่ง มันดูสะอาด สม่ำเสมอ และมีการทำให้เป็น โมดูล อย่างดี อีกทั้งยังจัดการกับปัญหาที่ต้องอาศัยความรู้ค่อนข้างลึกเกี่ยวกับฟอร์แมตไบนารีและ API ของเคอร์เนล
    โปรแกรมเมอร์ “ซีเนียร์” จำนวนมากคงทำอะไรแบบนี้ได้ยากแม้แค่ในระดับแนวคิด นี่จึงเป็นขั้วตรงข้ามของคำว่า “เด็กสมัยนี้…” เลย
    อยากรู้จริง ๆ ว่าเด็กอายุ 17 ได้ความรู้ระดับนี้มาได้อย่างไร หนังสือ เพื่อนวัยเดียวกัน ชมรมโปรแกรมมิง พ่อแม่ที่เป็นโปรแกรมเมอร์ อะไรทำนองนั้นหรือเปล่า?

    • ผมเคยอยู่ในสถานการณ์คล้ายกันตอนอายุน้อยกว่านี้ และเป็นยุคที่ไม่มีอินเทอร์เน็ตหรือมีจำกัด เลยพอตอบได้
      แค่มี ความอยากรู้อยากเห็นล้วน ๆ บวกกับเงื่อนไขสำคัญอย่าง “เข้าถึงได้เฉย ๆ” กับฮาร์ดแวร์ที่จำเป็น และมีหนังสือกับนิตยสารบ้าง ก็ไปได้ไกลพอสมควรแล้ว
      พ่อแม่ผมไม่ได้เป็นโปรแกรมเมอร์ แต่พ่อซื้อคอมพิวเตอร์ค่อนข้างเร็วในปี 1984 และต่อมาก็นำคอมไพเลอร์อย่าง TurboPascal, C++ จากที่ทำงานกลับมาที่บ้านให้ผมได้ทดลอง
      ผมเรียนรู้หลัก ๆ จากนิตยสารและหนังสือ ต่อมาจึงได้ติดต่อกับเพื่อนวัยเดียวกันในสายทำเดโมอยู่บ้าง และยังเคยสั่งซื้อดิสก์ที่มีเอกสารทางไปรษณีย์ (https://fr.wikipedia.org/wiki/DP_Tool_Club) เช่นข้อมูลอย่าง https://en.wikipedia.org/wiki/Ralf_Brown%27s_Interrupt_List
      ผมทำของเล็ก ๆ แล้วค่อย ๆ ทำซ้ำไปเรื่อย ๆ ตั้งแต่ชุดเครื่องมือวินโดว์สำหรับ CGA, โคลน Tetris, โคลน Bomberman, ซอฟต์แวร์ FFT จนสุดท้ายทำ การเรนเดอร์ 3D แบบเรียลไทม์ อย่าง Phong rendering ได้ด้วยซอฟต์แวร์ล้วน ๆ โดยไม่มี FPU (https://github.com/thbar/demomaking#obez-1995)
      ในโลกของการทำเดโม ผมบังเอิญได้เจอวัยรุ่นคนอื่น ๆ ที่ทำเรื่องเดียวกันอยู่ ดังนั้นผมก็ไม่ใช่กรณีพิเศษที่โดดเดี่ยวโดยสิ้นเชิง
      ทุกวันนี้ เด็กที่มีความอยากรู้อยากเห็นน่าจะไปได้ไกลกว่านั้นมาก หากความอยากรู้นั้นได้รับการส่งเสริมอย่างเหมาะสม
    • หลัก ๆ เป็นเพราะ หนังสือและบล็อก ผมชอบอ่านเยอะ ๆ
      และคุณเดาถูก พ่อผมเป็นนักวิทยาการคอมพิวเตอร์
    • ในรีโพซิทอรีมีลิงก์ไปยัง ซีรีส์บล็อก ที่ยอดเยี่ยมซึ่งอธิบายทีละขั้นตอน
    • เพราะผู้จัดการด้านวิศวกรรมซอฟต์แวร์ที่มีแนวโน้มว่าไม่ได้เขียนโค้ดที่มีประโยชน์มานานแล้ว ไม่ได้มาคอยสั่งวิศวกรว่าต้องทำอะไร
    • ทำให้นึกถึงเด็กอายุ 15 ที่ปฏิวัติการม็อดเกม Half-Life ด้วย Metamod
      เด็กบางคนนี่สุดยอดจริง ๆ ตอนอายุเท่านั้น ผมยังร้องไห้เพราะท้อกับการเรียน C++ อยู่เลย
  • เจ๋งมาก ตอนเด็ก ๆ ถ้าผมมี ความทุ่มเท ระดับนี้ก็คงดี
    แนะนำให้ลองเข้าร่วมโปรแกรมอย่าง Google Summer of Code, KDE Season of Code, Linux Foundation LFX, X.org EVoC
    มีปัญหาน่าสนใจให้แก้เยอะมาก ตอนเป็นนักศึกษาถ้ารู้เรื่องพวกนี้ก็คงดี แต่ตอนนี้ผมทำงานเต็มเวลาแล้วเลยไม่มีเวลามีส่วนร่วมกับโอเพนซอร์ส
    ขอให้ทำได้ดีต่อไป

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

    • ตอนแรกผมเรียน Python และ C++ ครับ แล้วถึงจุดหนึ่งก็เบื่อ C++ เลยย้ายมาใช้ C
      อีโมจิเป็นเหมือนมุกเล่น ๆ ที่ทำอยู่ประมาณสัปดาห์หนึ่ง ผมรู้สึกว่าในฝั่ง Rust เห็นอีโมจิบ่อยกว่านี้มาก เลยไม่ได้ตั้งใจลบออก
      อีโมจิรูปแมลงแถว ๆ PID ผมว่าตลกดี ส่วนที่อยู่ในคอมเมนต์อาจหายไปสักวันหนึ่งก็ได้ แต่จนถึงตอนนี้ยังไม่เจอปัญหากับเอดิเตอร์ และ Helix, Emacs, VSCode ก็ทำงานได้ดีทั้งหมด
      ผมกำลังคิดอยู่ว่าถ้าปิดสีของเทอร์มินัล ก็ควรปิดการพิมพ์อีโมจิออก stdout ใน REPL ไปด้วยหรือไม่
  • ขอแสดงความยินดี และขอให้โชคดีกับโปรเจกต์ต่าง ๆ
    คอมไพเลอร์ เป็นหนึ่งในโพรงกระต่ายแรก ๆ ที่ทำให้ผมสนใจคอมพิวติง
    หนึ่งในหนังสือที่ผมอ่านซ้ำไปซ้ำมาหลายครั้ง ตอนนี้เปิดให้อ่านฟรีแล้ว แม้จะเป็นเรื่องคอมไพเลอร์ไม่ใช่ดีบักกิง แต่ก็น่าจะใส่ไว้ในลิสต์อ่านได้
    “Compiler Design in C”
    https://holub.com/compiler/
    เป็นหนังสือค่อนข้างเก่า แต่อาจน่าสนใจ

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

    • ผมก็ประทับใจเหมือนกัน นี่เป็น ข้อได้เปรียบตั้งแต่ต้น ที่ยอดเยี่ยมจริง ๆ
      อีกไม่กี่ปีเขาก็ยังเป็นคนรักเทคโนโลยีอายุน้อยอยู่ และตอนนั้นมีโอกาสสูงว่าจะทำโปรเจกต์ที่น่าประทับใจยิ่งกว่านี้ได้
      เมื่อถึงจุดนั้น คนอาจไม่รู้กันมากนักว่าเขานำหน้าแค่ไหนในวัยนี้ เพราะก็มีคนฉลาดที่เริ่มตอนอายุ 20 กว่า ๆ แล้วทำงานน่าประทับใจได้เหมือนกัน และพออายุเท่ากัน คนสังเกตส่วนใหญ่ก็คงมองว่าเป็นเพื่อนร่วมรุ่น
      ถึงอย่างนั้น ข้อได้เปรียบตั้งแต่ต้นนี้อาจกลายเป็นข้อได้เปรียบที่ไม่แฟร์ซึ่งรักษาไว้ได้ต่อเนื่อง
      หลายปีหรือหลายสิบปีต่อมา มันอาจเผยตัวออกมาเหมือน “อาวุธลับ” บางอย่าง
  • ผมชอบอ่านโค้ดของโปรแกรมเมอร์อายุน้อย น่าสนใจดีที่ได้เห็นว่าคนที่มีความรู้ระดับค่อนข้างสูง แต่ยังไม่มีประสบการณ์หลายปี ออกแบบภาพรวมอย่างไร
    ผู้เขียนดูเหมือนเป็น คนเรียนรู้เร็ว และสำหรับผลงานจากการทำ 6 เดือน ถือว่ายอดเยี่ยม

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

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

    • เมื่อไม่กี่วันก่อนผมใช้ Motes แล้วเจอบั๊กในโค้ดอยู่บ้าง
      ในปลั๊กอิน Emacs อาจมีพฤติกรรมแปลก ๆ ได้ แต่สคริปต์ต่าง ๆ ทำงานได้สมบูรณ์แบบสำหรับผมตลอดช่วงไม่กี่สัปดาห์ที่ผ่านมา
      หวังว่าจะชอบนะครับ :D
  • เจ๋ง
    คืนนี้จะโคลนโค้ดมาดู
    ผมมีความสนใจคล้ายกัน เลยตั้งใจจะลอง มีส่วนร่วม กับโปรเจกต์นี้

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

    • ขอบคุณครับ บางครั้งก็ลำบากพอสมควรเลย :D