3 คะแนน โดย GN⁺ 2024-11-16 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Seer เป็นฟรอนต์เอนด์สำหรับ ควบคุม GDB ผ่าน GUI บน Linux และกำลังพัฒนาอย่างต่อเนื่องโดยมีเป้าหมายเป็น GUI สำหรับ GDB ที่เรียบง่ายและดูดี
  • สามารถติดตั้งได้ผ่านตัวจัดการแพ็กเกจหรือบิลด์จากซอร์ส โดยมีข้อกำหนดคือ Linux, C++17, GDB ที่รองรับ MI interpreter, CMake 3.5.0 ขึ้นไป, Qt6
  • Qt5 ไม่สามารถคอมไพล์กับซอร์สทรีล่าสุดได้อีกต่อไป โดย ซอร์สทรี 2.3 เป็นทรีสุดท้ายที่คอมไพล์ด้วย Qt5 ได้ และ v1.17 เป็นรีลีสสุดท้ายที่ใช้ Qt5
  • Seer มีการใช้งานผ่าน GUI สำหรับการเรียกดูซอร์ส, การแสดงตัวแปรและรีจิสเตอร์, การจัดการ breakpoint, watchpoint, catchpoint, printpoint, การดู stack และ thread รวมถึง GDB reverse debugging
  • ฟีเจอร์เพิ่มเติมมีทั้งมุมมอง assembly, การแสดงภาพ memory, array, struct, image และคอนโซล I/O ของโปรแกรมที่รัน ทำให้จัดการงานดีบักด้วย GDB ได้แบบมองเห็นภาพ

ภาพรวมโปรเจกต์

  • Seer เป็น GUI ฟรอนต์เอนด์ของ GDB สำหรับ Linux
  • เป้าหมายคือการ提供 GUI ที่เรียบง่ายและดูดี สำหรับ GDB
  • โปรเจกต์กำลังพัฒนาอย่างต่อเนื่อง หากพบ bug หรือต้องการฟีเจอร์ สามารถแจ้งได้ทางอีเมลหรือ GitHub issue

การติดตั้งและข้อกำหนด

  • Seer สามารถติดตั้งได้ผ่าน ตัวจัดการแพ็กเกจ หรือ บิลด์จากซอร์ส
  • ข้อกำหนด:
    • Linux
    • C++17
    • GDB ที่รองรับ mi interpreter
      • คำสั่งตรวจสอบ: gdb --interpreter=mi
    • CMake 3.5.0 ขึ้นไป
    • Qt6
      • เมื่อบิลด์จากซอร์ส ต้องมีแพ็กเกจพัฒนาของ Qt6 ที่เหมาะกับดิสทริบิวชัน
      • โมดูล Qt6 ที่จำเป็นคือ Core, Gui, Widgets, PrintSupport, Charts, Svg
      • คู่มือการบิลด์ Qt6: Building Seer - Qt6
  • ข้อจำกัดเกี่ยวกับ Qt5:
    • Seer ไม่สามารถคอมไพล์ด้วย Qt5 ได้อีกต่อไป

      • ซอร์สทรี 2.3 เป็นทรีสุดท้ายที่คอมไพล์ด้วย Qt5 ได้
      • คู่มือการบิลด์ Qt5: Building Seer - Qt5

ช่องทางติดตั้งแพ็กเกจ

  • Pamac บน Manjaro:
    • pamac install seer
  • zypper บน openSUSE Tumbleweed:
    • zypper install seergdb
  • Flathub:
  • เวอร์ชันเบต้าของ Flatpak:
    • Seer release page
    • ดาวน์โหลด seer.flatpak แล้วติดตั้ง
    • หากต้องการรัน GDB จาก GDB Launcher จำเป็นต้องใช้ flatpak-spawn --host

รีลีสและการย้ายไปใช้ Qt

  • สามารถดูข่าวสารล่าสุดได้ที่ Seer Wiki
  • v1.17 เป็นรีลีสสุดท้ายของ Qt5
  • รีลีสถัดไปคือ v2.0 และใช้ Qt6 เป็นพื้นฐาน
  • ในช่วงหนึ่งยังคอมไพล์ด้วย Qt5 ได้ แต่หากต้องการซอร์ส Qt5 เวอร์ชันเสถียรล่าสุด ควรใช้ v1.17

วิธีเรียกใช้งาน

  • Seer ถูกสร้างมาเพื่อให้เริ่มโปรแกรมที่จะดีบักจาก command line ได้ง่าย
  • เนื่องจาก GDB รองรับการดีบักโปรแกรมได้หลายวิธี Seer จึงมีรูปแบบการเรียกใช้งานหลายแบบด้วย
  • ดูวิธีเริ่มใช้งานได้ที่วิกิ Starting Seer

องค์ประกอบของ GUI หลัก

  • Source/Function/Types/Variables/Libraries

    • แสดงรายการไฟล์ซอร์สและไฟล์ header ที่ใช้ในโปรแกรม
    • สามารถค้นหาฟังก์ชัน, type และตัวแปร static ได้
    • ดับเบิลคลิกเพื่อเปิดไฟล์ซอร์สได้
    • แสดงรายการ shared library ที่โปรแกรมอ้างอิง
    • รายการไฟล์ซอร์สและ header สามารถลดจำนวนรายการที่แสดงด้วยการค้นหาได้
  • Variable/Register Info

    • แสดงค่าตัวแปรและรีจิสเตอร์
    • Logger บันทึกค่าตัวแปร
    • Tracker แสดงค่าของตัวแปรที่กำหนดทุกครั้งที่ GDB ไปถึงจุดหยุด เช่น step, next, finish
    • Registers แสดงค่าของรีจิสเตอร์ CPU ทั้งหมด
  • Code Manager

    • เป็นพื้นที่ขนาดใหญ่ตรงกลางของ Seer GUI และแสดงไฟล์ซอร์สเป็นแท็บ
    • ใช้ ^F เพื่อค้นหาข้อความในไฟล์ได้
    • ดับเบิลคลิกชื่อตัวแปรเพื่อเพิ่มเข้า Logger ได้
      • ดับเบิลคลิกพร้อม CTRL จะเติม * ไว้หน้าตัวแปร
      • ดับเบิลคลิกพร้อม SHIFT จะเติม & ไว้หน้าตัวแปร
      • ดับเบิลคลิกพร้อม CTRL+SHIFT จะเติม *& ไว้หน้าตัวแปร
    • ใช้เมนูคลิกขวาเพื่อเพิ่มตัวแปรเข้า Tracker หรือ Memory Visualizer ได้
    • สามารถสร้าง breakpoint หรือ printpoint ที่บรรทัดใดบรรทัดหนึ่งได้
    • สามารถรันจนถึงบรรทัดที่กำหนดได้
    • แท็บสามารถแยกออกมาได้ด้วยการดับเบิลคลิก

การควบคุมการดีบักและการดูสถานะการรัน

  • พื้นที่ด้านล่างจัดการ breakpoint, watchpoint, catchpoint, printpoint, คำสั่ง GDB แบบแมนนวล และ log
  • ในแท็บคำสั่งแบบแมนนวล สามารถป้อนคำสั่ง GDB หรือ GDB/MI ได้โดยตรง
    • คำสั่งที่ป้อนจะถูกจำไว้สำหรับการใช้งาน Seer ครั้งถัดไป
  • Breakpoint manager ใช้สร้างและจัดการ breakpoint
  • Watchpoint manager ใช้เฝ้าดูการเข้าถึงตัวแปร
    • สามารถเฝ้าดูการอ่าน, การเขียน หรือทั้งการอ่านและเขียนได้
  • Catchpoint manager หยุดการรันที่การเรียก throw, rethrow, catch ของ C++
  • Printpoint manager สามารถพิมพ์ค่าตัวแปรที่จุดที่กำหนดได้เหมือน dprintf ของ GDB
  • GDB output บันทึกเอาต์พุตของโปรแกรม GDB เอง
  • Seer output บันทึกเอาต์พุตสำหรับวินิจฉัยของโปรแกรม Seer
  • ข้อมูล Stack frame:
    • ดับเบิลคลิกรายการ frame เพื่อเปลี่ยน scope ของฟังก์ชันปัจจุบันได้
    • แสดงอาร์กิวเมนต์ของฟังก์ชันในแต่ละ frame
    • แสดงค่าตัวแปร local ของฟังก์ชันปัจจุบัน
  • ข้อมูล Thread:
    • แสดงรายการ ID ของ thread ทั้งหมด
    • ดับเบิลคลิก thread ID เพื่อเปลี่ยน scope ของ thread ปัจจุบันได้
    • แสดงรายการ stack frame ของแต่ละ thread
  • รองรับโหมด Reverse Debugging ของ GDB
    • สามารถเปิดหรือปิดการบันทึกคำสั่งได้
    • สามารถตั้งทิศทางการ replay เป็น forward หรือ reverse ได้

คอนโซลและมุมมอง Assembly

  • Seer Console แสดงเอาต์พุตข้อความทั้งหมดของไฟล์ executable
  • การป้อนข้อความให้ไฟล์ executable ก็ทำได้จากคอนโซลเช่นกัน
  • Assembly View เพิ่มแท็บที่แสดง assembly ที่กำลังรันอยู่ถัดจากแท็บซอร์สโค้ด
    • เปิดใช้งานได้ที่ View->Assembly View
    • สามารถตั้ง breakpoint ในแท็บ assembly ได้ด้วย
    • คำสั่งปัจจุบันจะถูกไฮไลต์
    • เมื่อดับเบิลคลิกรายการในแท็บ Breakpoints หรือแท็บ Stack frames จะแสดง assembly ของที่อยู่นั้น
    • รองรับคีย์ลัด Nexti, Stepi โดยค่าเริ่มต้นมักเป็น Ctrl+F5, CTRL+F6
    • ใช้ ^F ในแท็บ assembly เพื่อแสดงแถบค้นหาได้
    • ฟีเจอร์ assembly นี้เป็นฟีเจอร์ใหม่ และเปิดรับข้อเสนอแนะด้านการเปลี่ยนแปลงหรือฟีเจอร์

เครื่องมือแสดงภาพ

  • Memory Visualizer

    • ตรวจสอบเนื้อหา raw memory ได้
    • ดูได้ในรูปแบบ memory และ disassembly
  • Array Visualizer

    • แสดงภาพเนื้อหาของ array
    • มีรูปแบบการแสดงผล Normal, Spline, Scatter
    • สามารถใช้ array สองชุดเป็นกราฟ X-Y ได้
    • array ตัวอย่าง points ประกอบเป็นรูปทรงเส้นขอบแบบ X-Y
  • Struct Visualizer

    • แสดงเนื้อหาของ struct ใน C/C++ หรือ class ใน C++
    • ตัวอย่างแสดงเนื้อหาของ *this ใน class C++ ปัจจุบัน
    • สมาชิกของ struct ที่เป็น type พื้นฐานสามารถแก้ไขได้
    • มี Basic Struct Visualizer ด้วย ซึ่งเบากว่าแต่ไม่สามารถตาม pointer ได้และแก้ไขไม่ได้
  • Image Visualizer

    • ใช้เมื่อดูเนื้อหา raw memory ที่เป็นรูปภาพได้

การสนับสนุนและการติดต่อ

  • ส่ง bug หรือคำขอฟีเจอร์ได้ที่ epasveer@att.net หรือเปิดเป็น GitHub issue
  • เปิด issue: GitHub issues

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

 
GN⁺ 2024-11-16
ความคิดเห็นบน Hacker News
  • ลองบิลด์และใช้งานกับ Godot บน Linux อยู่สักพัก โดยรวมก็โอเค แต่ UI ให้ความรู้สึกว่า ยัดวิดเจ็ตมากเกินไป และดูยังไม่ค่อยขัดเกลา
    การเปลี่ยนฟอนต์ของเอดิเตอร์ไม่ทำงาน และเมื่อเอาเมาส์ไปวางบนตัวแปรเพื่อดูค่า ก็ไม่มีอะไรเกิดขึ้น หรือเคอร์เซอร์เปลี่ยนไปแวบเดียวก่อนที่ GDB จะขึ้นข้อผิดพลาดว่าพยายามใช้นิพจน์ที่มีชนิด/คีย์เวิร์ด
    การดับเบิลคลิกตัวแปรจะเพิ่มค่าปัจจุบันและไทม์สแตมป์ลงในพาเนลบางอัน ดังนั้นตัว UI มีความสามารถในการอ่านค่า/นิพจน์อยู่ แต่ดูเหมือนส่วนทูลทิปจะพัง
    ถ้าขัดเกลาอีกนิดก็น่าจะมีประโยชน์ แต่ในบรรดาฟรอนต์เอนด์ที่เคยใช้มา ตัวที่รู้สึกไม่ชอบน้อยที่สุดคือ Gede UI เรียบง่ายและเข้าใจง่าย แม้ฟีเจอร์จะไม่มาก แต่ฟีเจอร์ที่มีให้ใช้ก็มักทำงานได้ดีโดยไม่มีบั๊ก: https://gede.dexar.se/

    • ผมเป็นผู้เขียน Seergdb ถ้าช่วยอธิบายเพิ่มเติมเรื่องที่ตั้งค่าฟอนต์เอดิเตอร์ไม่ได้จะดีมาก เพราะจากการทดสอบดูเหมือนจะทำงานได้
      ถ้าต้องการบันทึกการตั้งค่าแบบถาวร ต้องใช้ “Save Configuration...” ส่วนการ แสดงค่าตอนเอาเมาส์ไปวาง บนตัวแปรผมจะลองทดสอบดูเช่นกัน และถ้ามีบั๊กหรือคำขอฟีเจอร์ก็ช่วยเปิดเป็น GitHub issue ไว้ได้เลย
    • ตอนกำลังหาบั๊กในโค้ดของตัวเอง ผมไม่อยากต้องมารับมือกับ บั๊กของเครื่องมือดีบัก เพิ่มอีก เลยจด Gede ไว้ลองใช้ครั้งหน้าที่ต้องดีบัก
  • GDB มี ส่วนติดต่อผู้ใช้แบบข้อความ (TUI) ในตัวที่ใช้ง่ายกว่าที่คิดด้วย รองรับการโต้ตอบด้วยเมาส์ด้วย: https://sourceware.org/gdb/current/onlinedocs/gdb.html/TUI.h...

    • ส่วนตัวชอบคอมมานด์ไลน์มากกว่า TUI แต่ใส่แบบนี้ไว้ใน .gdbinit ก็ได้
      tui new-layout default regs 1 {-horizontal src 1 asm 1} 2 status 0 cmd 1
      tui layout default
      tui enable
    • ชุด Neovim + nvim-dap + nvim-dap-ui + gdb ดีกว่านั้นมาก
    • น่าเสียดายที่ใช้ได้เฉพาะกรณีที่ GDB ถูกบิลด์มาโดย รวมการรองรับ TUI เท่านั้น
  • หลังจากลองใช้ฟรอนต์เอนด์ของ GDB หลายตัวแล้ว ผมมองว่า TUI ดีที่สุด ถ้าโปรแกรมพิมพ์เอาต์พุตจนอินเทอร์เฟซเละ แค่รู้จัก Ctrl + L เพื่อวาดหน้าจอใหม่ก็พอ
    ใน $XDG_CONFIG_HOME/gdb/gdbinit ผมใส่ไว้แค่นี้
    layout src
    set confirm off

    • ผมชอบใช้พรอมป์แบบมีสีแบบนี้
      set prompt \001\033[01;36m\002(gdb)\001\033[0m\002
      ส่วนฮิสทอรีบันทึกแบบนี้
      set history save on
      set history size 500000
      set history filename ~/.cache/gdb/history
    • ใช้ gdb-dashboard เยอะและขอแนะนำ คล้ายกับ TUI แต่เลือกข้อมูลที่จะแสดงได้หลากหลาย และ สีช่วยให้อ่านเอาต์พุตง่ายขึ้นมาก
      ยังสามารถแสดงแดชบอร์ดในเทอร์มินัลอื่น หรือแบ่งไปหลายเทอร์มินัลได้ ทำให้จัดเลย์เอาต์หน้าต่างได้ดีกว่า เมื่อก่อนเคยเขียนสคริปต์ให้ tmux สร้างเลย์เอาต์เทอร์มินัลอัตโนมัติแล้วเชื่อมเข้ากับ GDB แม้จะเหนื่อยอยู่พอควร แต่ก็ได้เลย์เอาต์ที่ค่อนข้างดี
    • Ctrl + L เป็นสิ่งที่ต้องรู้ในสาย TUI รวมถึงเวลาหน้าจอ Vim เละด้วย พอรู้เรื่องนี้แล้ว “แครช” ปริศนาจำนวนมากก็ถูกแก้ได้
    • gef รองรับ tmux ทำให้เอาต์พุตของโปรแกรมไปอยู่ในพาเนล tmux อีกอัน
    • ฟรอนต์เอนด์ gud-gdb ใน Emacs ค่อนข้างสะดวกและใช้ง่าย
  • แม้จะเชื่อมต่อจาก Windows ไปยัง Linux หรือใช้ WSL ก็สามารถรีโมตดีบักโปรเซส Linux ด้วย WinDBG/VisualStudio ได้

    • แค่ฝั่งรีโมตมี gdbserver ทำงานอยู่ก็พอไม่ใช่หรือ?
  • นี่คือ Qt UI สำหรับ GDB
    เท่าที่ผมรู้ยังมี gdbgui ซึ่งเป็น UI บนเว็บสำหรับ GDB ด้วย: https://www.gdbgui.com/
    เป็นเรื่องดีเสมอที่มีความเคลื่อนไหวในฝั่งเครื่องมือดีบักมากขึ้น

    • ชอบตรงที่ GDB ใน Qt Creator ทำงานได้โดยไม่ต้องตั้งค่าซับซ้อน แค่วางเบรกพอยต์ไม่กี่จุดแล้วกดรัน IDE ก็จัดการที่เหลือให้
    • ถ้าจะเพิ่มเข้าไปในรายชื่อ GDB GUI อีกตัว ก็มีตัวที่ผมทำเองด้วย: https://github.com/dzaima/grr
      ยังขาดฟีเจอร์อยู่พอสมควร ซึ่งบางกรณีการใช้งานอาจจำเป็น เพราะวิธีใช้งานของผมเน้น การดีบักระดับแอสเซมบลี เป็นหลัก เลยไม่ได้ต้องการฟีเจอร์หวือหวาอะไรมากนัก
    • ยังมี DDD ด้วย เป็นฟรอนต์เอนด์ Motif
    • VS Code ก็มีฟรอนต์เอนด์ GDB ที่ใช้ได้ดี และเหมาะเป็นพิเศษเวลาจะดีบัก ไมโครคอนโทรลเลอร์แบบฝังตัว
    • พูดถึงดีบักเกอร์บนเว็บ เมื่อเร็ว ๆ นี้ผมทำโปรเจกต์คล้ายกันที่โฟกัสการดีบักแอสเซมบลี x86-64: https://github.com/robalb/x86-64-playground
  • เมื่อ 2 ปีก่อนก็มีการถกเถียงขนาดกลางอยู่เหมือนกัน: https://news.ycombinator.com/item?id=33044885

  • ถ้าเป็นผู้ใช้ Emacs แล้ว GUD ถือเป็นการผสานรวม GDB ที่ยอดเยี่ยมทีเดียว

    • หลังจาก LSP โผล่มา Emacs ก็รู้สึกดีกว่าทุกอย่าง ไม่มีเหตุผลให้ย้ายออก โดยเฉพาะหลังจากเร็วขึ้นด้วยการคอมไพล์แบบ native
      ไม่มีเหตุผลต้องคอยลองเอดิเตอร์ใหม่ประจำเดือนเพียงเพราะมันเพิ่มฟีเจอร์เหมือนของเล่นบางอย่าง ใส่ปลั๊กอินสักตัวใน Emacs ก็ได้ฟีเจอร์เดียวกัน โดยที่ส่วนอื่น ๆ ยังเป็นแบบที่ผมชอบเหมือนเดิม
      ผมเริ่มอินกับการเขียนโค้ดจริงจังในยุคที่ยังมี Atom และค่อนข้างเสียดายที่ Atom หายไปแล้วกลายเป็น VS Code เพราะ VS Code ก็ดี แต่ไม่ได้เดินตามปรัชญาเดียวกับ Atom
      ตั้งแต่เรียน Emacs เมื่อราว 4 ปีก่อน ก็ไม่มีเครื่องมือใหม่ตัวไหนเคยโน้มน้าวผมได้ว่า “นี่เป็นเทคโนโลยีเก่าแล้ว ควรย้ายไปใช้อย่างอื่น” เป็นการพร่ำยาวแบบหลุดประเด็นหน่อย แต่ผมขอบคุณจริง ๆ ที่ Emacs ยังอยู่รอดต่อมาได้
    • ผมชอบ M-x gdb ซึ่งเป็น GDB Graphical Interface ของ Emacs มากกว่าการผสานรวมพื้นฐานผ่าน GUD อย่าง M-x gud-gdb
      ช่วงหลังต้องเปลี่ยนไปใช้ GUD เพื่อรัน lldb แล้วคิดถึงหน้าต่างเฉพาะที่แสดง breakpoint, thread, stack ปัจจุบัน ฯลฯ
      ข้อดีของ GUD คืออินเทอร์เฟซสม่ำเสมอแม้ตัวดีบักเกอร์จะต่างกัน ดังนั้นต่อให้ดีบัก Python ด้วย pdb แล้วไปดีบัก C++ ด้วย lldb ก็ไม่ต้องเรียนคีย์ลัดใหม่
      https://www.gnu.org/software/emacs/manual/html_node/emacs/GD...
      https://www.gnu.org/software/emacs/manual/html_node/emacs/St...
    • dape(https://github.com/svaante/dape#) เป็นตัวเลือกที่ดีสำหรับภาษาที่มีดีบักเกอร์ซึ่ง implement Debug Adapter Protocol
      พอใช้ร่วมกับ debugpy แล้วก็เลิกใช้ M-x pdb ไปเลย และ UI ก็คล้ายกับ M-x gdb มาก
    • lsp-mode + dap-mode ก็ทำงานได้ดีเหมือนกัน แต่ต้องไปปรับไฟล์ launch.json เองพอสมควร
  • ดีเลย เห็นครั้งแรกแล้วนึกถึง DDD ที่ดูเหมือนเวทมนตร์ น่าแปลกใจที่ DDD ยังมีการดูแลอยู่
    https://en.wikipedia.org/wiki/Data_Display_Debugger
    https://www.gnu.org/software/ddd/

    • ผมเรียน DDD ที่มหาวิทยาลัยเมื่อ 20 ปีก่อน ตอนนั้นก็รู้สึกว่ามันทื่อ ๆ อยู่แล้ว ตอนนี้มองด้วยความใจกว้างขึ้นมาก แต่ Motif ก็ยังขัดตาอยู่ดี
      จากบทสนทนาตลอดหลายปี DDD นั้นย้อนแย้งตรงที่เป็นเครื่องมือต่อต้านการตลาดที่ยอดเยี่ยม และเหมือนผลักนักพัฒนาไปหา UI ดีบักเกอร์ในตัวของ IDE ที่ตัวเองชอบแทน ตัว DDD เองทรงพลังมากก็จริง แต่คำว่า “ประโยชน์ใช้สอยสำคัญกว่าสุนทรียะ” ก็มีขีดจำกัดเหมือนกัน
    • แน่นอนว่า DDD ยังมีการดูแลอยู่ ผมเขียนถึงฟีเจอร์ต่าง ๆ ไว้ที่นี่: https://begriffs.com/posts/2022-07-17-debugging-gdb-ddd.html
      หลังจากเขียนบทความ ผู้ดูแลก็แก้ปัญหาที่ผมชี้ไว้ ทำให้ตอนนี้ไม่ต้องใช้วิธีอ้อม ๆ หลายอย่างแล้ว 3.4.0 และ 3.4.1 เป็นรีลีสที่ค่อนข้างใหญ่
    • ผมชอบที่ DDD มี การแสดงภาพแบบกราฟิก หลายแบบในตัว โดยเฉพาะฟีเจอร์แสดงภาพโครงสร้างข้อมูลที่ผมคิดมาตลอดว่ามันเจ๋ง
      เมื่อก่อนเคยมีโปรเจกต์พยายามพอร์ตไป GTK3 แต่ดูเหมือนจะหายไปแล้ว อย่างไรก็ดี ดีใจที่โปรเจกต์ mainline ยังเดินหน้าต่อ
    • สำหรับผมมันทำให้นึกถึง Insight ซึ่งเป็นฟรอนต์เอนด์ GDB ตัวโปรดที่เคยทำงานได้ดีบน Windows ในยุค cygwin น่าเสียดายที่แน่ชัดว่าไม่ได้รับการดูแลแล้ว: https://sourceware.org/insight/screenshots.php
      แต่ก็ดูเหมือนมีคนย้ายไป GitHub เพื่อชุบชีวิตและทำงานต่อเล็กน้อย: https://github.com/antony-jr/insight
    • DDD ยอดเยี่ยมมาก ผมยังใช้อยู่ แต่ผมก็เป็นคนเหมือนฟอสซิลนั่นแหละ
      ผมเจอ DDD ตอนกำลังหาอะไรที่คล้ายกับ dbxtool ที่เคยใช้บนเครื่อง Sun Microsystems รุ่นเก่า ๆ คนสมัยนี้ค่อนข้างได้เสวยสุขจากของอย่างการดีบักระดับซอร์สโค้ด
  • ดูเหมือนโปรเจกต์ GNU และ RMS จะถูกล้อเลียนเป็นมีมบ่อย ๆ แต่ GDB เป็นเครื่องมือที่ทรงพลัง ผมเคยลองจับเองแค่นิดหน่อย แต่ดูเหมือนมันส่งผลมหาศาลต่องานของนักพัฒนามาหลายปี

    • ถามด้วยความสงสัยจริง ๆ ว่า GNU ถูกล้อเพราะอะไร?
  • กว่า 10 ปีก่อน ตอนเขียน C++ บน Linux ผมใช้ Qt Creator ที่มีดีบักเกอร์ในตัว มันเป็นฟรอนต์เอนด์ GDB ที่ทำงานได้ดีมาก และสำหรับ C++ กับ Qt ผมไม่เห็นเหตุผลต้องใช้อย่างอื่นเลย