dbx คือหนึ่งในเครื่องมือดีบักระดับ Source-level ตัวแรก ๆ บนระบบปฏิบัติการตระกูล Unix พัฒนาขึ้นครั้งแรกช่วงต้นทศวรรษ 1980 ที่ University of California, Berkeley (UC Berkeley) โดย Mark Linton เพื่อใช้งานบนระบบ 4.2BSD ก่อนจะกลายมาเป็นดีบักเกอร์มาตรฐานประจำระบบปฏิบัติการเชิงพาณิชย์ระดับองค์กร เช่น IBM AIX, SunOS/Solaris, SGI IRIX และ DEC OSF/1
แม้ในปัจจุบันนักพัฒนาส่วนใหญ่จะคุ้นเคยกับ GDB (GNU Debugger) หรือ LLDB แต่บนเครื่องเซิร์ฟเวอร์ Unix ดั้งเดิม โดยเฉพาะ IBM AIX เครื่องมือ dbx ยังคงเป็นยูทิลิตีหลักที่ทรงพลังอย่างยิ่งในการแกะรอยปัญหาของโปรแกรมที่คอมไพล์จากภาษา C, C++, Fortran และ Pascal
สถาปัตยกรรมและการทำงานของ dbx
dbx ทำงานผ่านการควบคุมโพรเซสและเข้าถึงพื้นที่หน่วยความจำของระบบโดยตรง ผ่านกลไกหลัก 3 ส่วน
- Symbol Table Inspection
dbx อาศัยข้อมูลสัญลักษณ์ (Debug Symbols) ที่คอมไพลเลอร์ฝังไว้ในไฟล์ไบนารี เช่น ฟอร์แมต DWARF, XCOFF หรือ stabs เพื่อแมปแอดเดรสหน่วยความจำกลับมาเป็นชื่อตัวแปร ฟังก์ชัน และบรรทัดของซอร์สโค้ด - Process Tracing (ptrace)
ใช้งาน system call พื้นฐานของ Unix เช่นptraceในการแนบตัวเข้ากับโพรเซส (Attach), หยุดการทำงาน (Suspend), อ่าน/เขียนค่าใน Registers และควบคุมจังหวะการรันทีละคำสั่ง - Core Dump Post-Mortem Analysis
เมื่อโปรแกรมเกิดข้อผิดพลาดร้ายแรงจนระบบปฏิบัติการยุติการทำงานและเขียนภาพจำลองหน่วยความจำออกมาเป็นไฟล์coreตัว dbx สามารถโหลดไฟล์ไบนารีพร้อมไฟล์ core ขึ้นมาเพื่อย้อนดูสแต็กการเรียกใช้ฟังก์ชัน ณ วินาทีที่แครชได้ทันที
รูปแบบคำสั่งและการใช้งานจริง
การจะใช้งาน dbx ได้เต็มประสิทธิภาพ ต้องคอมไพล์โปรแกรมพร้อมแฟล็ก -g เพื่อให้คอมไพลเลอร์สร้าง Symbol Table เสมอ
Plain Text
# ตัวอย่างการคอมไพล์ด้วย GCC หรือ IBM XL C
gcc -g -o myapp myapp.c