16 คะแนน โดย GN⁺ 2025-03-07 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ดีบักเกอร์ย้อนเวลา ที่ใช้งานง่ายและรองรับภาษาโปรแกรมหลากหลาย
    • บันทึกการทำงานของโปรแกรมเพื่อสร้างไฟล์เทรซแบบแยกอิสระที่แชร์ได้ และสามารถเลื่อนการทำงานไปข้างหน้าหรือย้อนกลับในสภาพแวดล้อม GUI พร้อมตรวจสอบประวัติของทุกตำแหน่งหน่วยความจำได้
  • ข้อดีของการดีบักแบบย้อนเวลา
    • แก้บั๊กที่ทำซ้ำได้ยากได้อย่างง่ายดาย : หากมีบันทึกการรันที่เกิดบั๊ก ก็สามารถหาสาเหตุได้ภายใน 30 นาที
    • เมื่อรู้ที่มาของค่า ก็จะแก้บั๊กได้ง่ายขึ้น
      • หากเกิดผลลัพธ์ที่ไม่คาดคิดในโปรแกรม สามารถคลิกอีเวนต์นั้นเพื่อดูจุดที่ปัญหาเกิดขึ้นได้ทันที
      • CodeTracer รองรับการติดตามว่าค่านั้นถูกสร้างขึ้นมาจากที่ใด เพื่อช่วยค้นหาต้นตอที่แท้จริงของบั๊กได้ด้วยการเลื่อนไปมาเพียงไม่กี่ครั้ง
      • สามารถเลื่อนไปข้างหน้าหรือย้อนกลับเพื่อสำรวจได้อย่างอิสระในทุกช่วงเวลาของการทำงานของโปรแกรม
  • การเทรซใช้ฟอร์แมตแบบเปิด และกำลังมีโปรเจ็กต์รองรับภาษาอย่าง Ruby, Python เป็นต้น
    • มีแผนรองรับการดีบักภาษาสำหรับ system programming เช่น C/C++, Rust, Nim, D, Zig, Go, Fortran, FreePascal เป็นต้น โดยผสานรวมกับแบ็กเอนด์ RR

ฟีเจอร์หลักของ CodeTracer

ดีบักแบบรอบรู้ทั้งหมด (Omniscience)

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

Tracepoints

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

Call Trace

  • ไม่ใช่แค่สแต็กเทรซธรรมดา แต่แสดงต้นไม้การเรียกฟังก์ชันของการทำงานทั้งโปรแกรม
  • สำรวจได้ง่ายด้วยการกรองและการเรียงลำดับ

การสำรวจสถานะและประวัติ (State and History Explorer)

  • ติดตามประวัติการเปลี่ยนแปลงค่าของตัวแปรทั้งหมดได้
  • ย้ายไปยังจุดในโค้ดที่ค่าของตัวแปรถูกเปลี่ยนได้ทันที
  • ติดตามค่าเดิมของตัวแปรที่ถูกคัดลอกโดยอัตโนมัติ ช่วยให้วิเคราะห์บั๊กได้ง่ายขึ้น

บันทึกเหตุการณ์ (Event Log)

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

เอาต์พุตเทอร์มินัล (Terminal Output)

  • บันทึกและแสดงผล stdout, stderr เสมือนเทอร์มินัล เพื่อดูเอาต์พุตของโปรแกรมที่ถูกบันทึกไว้
  • คลิกเพื่อย้ายไปยังตำแหน่งโค้ดที่ทำให้เกิดเอาต์พุตนั้นได้อย่างแม่นยำ

Mouse Stepping

  • ใช้เมาส์เพื่อย้ายไปยังส่วนต่าง ๆ ของโค้ดได้ทันที
    • ย้ายตามบรรทัด: คลิกกลางเมาส์ (สามารถใช้ Ctrl+클릭 ได้)
    • เข้าสู่ฟังก์ชัน: ดับเบิลคลิกที่การเรียกฟังก์ชันเพื่อเข้าไปภายใน (สามารถใช้ Ctrl+Alt+클릭 ได้)
    • ตัวเลือกเพิ่มเติม: สำรวจฟังก์ชันเสริมได้จากเมนูคลิกขวา

Scratchpad

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

คำสั่ง CodeTracer CLI

  • ct run <application> - รันโปรแกรมและบันทึกอัตโนมัติ
  • ct record <application> - สร้างไฟล์เทรซ
  • ct replay - เล่นไฟล์เทรซที่สร้างไว้
  • ct replay <program-name> - โหลดบันทึกการรันครั้งล่าสุด
  • ct replay --id=<trace-id> - รันด้วย Trace ID ที่ระบุ
  • ct replay --trace-folder=<trace-folder> - รันไฟล์เทรซในโฟลเดอร์ที่กำหนด
  • ct help / ct --help - ดูคำสั่งที่ใช้งานได้
  • ct version - ตรวจสอบเวอร์ชันปัจจุบัน

คีย์ลัด

  • คีย์ลัดเริ่มต้นออกแบบมาให้คุ้นเคยสำหรับผู้ใช้ Visual Studio™
  • มีฟังก์ชันย้อนกลับของความสามารถดีบักเดิมโดยใช้ปุ่ม Shift ร่วมกัน (F10 = "สเต็ปถัดไป", Shift+F10 = "สเต็ปก่อนหน้า")
  • สามารถปรับแต่งคีย์ลัดได้โดยแก้ไขไฟล์ ~/.config/codetracer/.config.yml

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

 
GN⁺ 2025-03-07
ความคิดเห็นจาก Hacker News
  • เจ๋งมาก เมื่อก่อนเคยมีโอกาสขอฟีเจอร์กับผู้ออกแบบโปรเซสเซอร์ Intel

    • ขอ system tick timer สำหรับการประทับเวลาในล็อก และพวกเขาก็ทำมันขึ้นมาจริง
    • ขอ bus mask และ value register ที่ใช้ trigger debug interrupt และพวกเขาก็ทำอันนั้นด้วย
    • ขอประวัติแหล่งที่มาของการกระโดด แต่สิ่งนั้นไม่ได้เกิดขึ้นจริง
    • ตอนนั้น Intel ขาย debug probe ราคาแพงสำหรับบันทึกบัส
    • ประวัติการกระโดดที่ฉันเสนออาจทำให้ผู้ใช้ส่วนใหญ่ไม่จำเป็นต้องใช้มัน
    • สุดท้ายมันก็ไม่เกิดขึ้น และเราก็ต้อง build โค้ด debug ใหม่เพื่อเพิ่ม tracing และ instrumentation
  • การรองรับ Noir สมเหตุสมผล เพราะ execution trace มีคุณค่าเป็นพิเศษใน ZK proof

    • รอคอย implementation ของ Python และ Ruby อยู่
    • ด้วยความเป็นไดนามิกของภาษาเหล่านี้ บางครั้งบั๊กจึงหายากเป็นพิเศษ
    • สงสัยว่ามีใครเคยใช้ Noir บ้างไหม
    • สงสัยเรื่อง performance overhead ของกลไก tracing
    • และก็สงสัยว่ามีแผนรองรับ JavaScript/TypeScript สำหรับงานเว็บด้วยหรือไม่
  • ถ้าใช้ Clojure หรือ ClojureScript แนะนำให้ลองดู FlowStorm

  • Noir เป็นภาษาที่ออกแบบเฉพาะโดเมนสำหรับระบบพิสูจน์แบบ SNARK

  • สงสัยว่าทำไม CodeTracer ถึงเขียนด้วยสองภาษา

  • ชอบมาก อยากได้อะไรแบบนี้มาตลอด

    • เดี๋ยวจะลองทดสอบกับ Python ทีหลัง
    • ถ้ามีรองรับ JS/TS ด้วยก็คงดี
    • สงสัยว่า rr debugger รองรับ MacOS, Windows, Android หรือไม่
    • และสงสัยว่าการบันทึกสำหรับแอปทั่วไปหนักแค่ไหน
    • น่าจะดีถ้า LLM สามารถให้คอนเท็กซ์ผ่าน MCP server หรือให้ LLM เลือกประวัติตัวแปรที่อยากดูได้
    • ฟีเจอร์กรองการบันทึกก็น่าจะดีเช่นกัน
  • ดูเจ๋ง แต่ในระบบโปรดักชันไฟล์ trace น่าจะโตเร็วมาก

    • สงสัยว่ามีวิธีผูกไฟล์เข้ากับแต่ละเซสชันอย่างไร
  • ขอบคุณที่ช่วยสร้าง ecosystem ของ Nim

  • ตื่นเต้นมาก บริจาคผ่าน Open Collective ไปแล้ว

    • ทีมนี้เต็มไปด้วยคนมีความสามารถ
    • มีอินเทอร์เฟซสำหรับ time-travel debugging ที่ยอดเยี่ยม
    • ถ้าใช้ rr ก็คงรันบน macOS ไม่ได้
    • โชคดีที่ lima vms สร้างจากระยะไกลได้ง่าย
  • ขอแสดงความยินดีกับการเปิดตัว ทำงานกันได้ยอดเยี่ยมมากจนถึงตอนนี้

    • ตอนนี้ยังไม่ใช่สิ่งที่ฉันต้องใช้ แต่จะคอยติดตามความคืบหน้าของ backend ทางเลือกและการรองรับภาษาโปรแกรมเพิ่มเติม
    • ขอบคุณ