อ่าน 6 นาที
ดีบักเกอร์ GNU
GNU Debugger ( GDB ) เป็น ดีบักเกอร์ แบบพกพา ที่ทำงานบน ระบบ ที่คล้าย Unix หลาย ระบบและใช้งานได้กับ ภาษาโปรแกรม หลายภาษา รวมถึง Ada , Assembly , C , C++ , D , Fortran , Haskell ,...
ดีบักเกอร์ GNU
| ดีบักเกอร์ GNU | |
|---|---|
| นักพัฒนา | โครงการ GNU |
| ปล่อย | พ.ศ. 2529 |
| เวอร์ชันเสถียร | 17.2 [ 1 ] |
| เขียนเป็น | C , C++ , Python |
| ระบบปฏิบัติการ | คล้ายยูนิกส์ , วินโดวส์ |
| พิมพ์ | ดีบักเกอร์ |
| ใบอนุญาต | จีพีแอลวี3 |
| เว็บไซต์ | www.gnu.org/software/gdb |
| ที่เก็บข้อมูล |
|
GNU Debugger ( GDB ) เป็นดีบักเกอร์แบบพกพา ที่ทำงานบน ระบบ ที่คล้าย Unix หลาย ระบบและใช้งานได้กับภาษาโปรแกรม หลายภาษา รวมถึงAda , Assembly , C , C++ , D , Fortran , Haskell , Go , Objective-C , OpenCL C , Modula-2 , Pascal , Rust [ 2 ]และภาษาอื่นๆ บางส่วน[ 3 ] มันสามารถตรวจจับปัญหาในโปรแกรมขณะที่ปล่อยให้โปรแกรมทำงาน และช่วยให้ผู้ใช้สามารถตรวจสอบตัวแปรโปรแกรมและรีจิสเตอร์ของเครื่องได้
ประวัติศาสตร์
GDB ถูกเขียนขึ้นครั้งแรกโดยRichard Stallmanในปี 1986 เป็นส่วนหนึ่งของระบบGNU ของเขา หลังจากที่ GNU Emacs ของเขา "มีความเสถียรพอสมควร" [ 4 ] GDB เป็นซอฟต์แวร์ฟรีที่เผยแพร่ภายใต้ใบอนุญาตสาธารณะทั่วไปของ GNU (GPL) โดยจำลองมาจาก ดีบักเกอร์ DBXซึ่งมาพร้อมกับการแจกจ่ายBerkeley Unix [ 4 ]
ตั้งแต่ปี พ.ศ. 2533 ถึง พ.ศ. 2536 ได้รับการดูแลโดยJohn Gilmore [ 5 ] ปัจจุบันได้รับการดูแลโดยคณะกรรมการอำนวยการ GDB ซึ่งได้รับการแต่งตั้งโดยมูลนิธิซอฟต์แวร์เสรี[ 6 ]
คุณสมบัติทางเทคนิค
GDB มีฟังก์ชันการทำงานที่ครอบคลุมสำหรับการติดตาม ตรวจสอบ และเปลี่ยนแปลงการทำงานของโปรแกรมคอมพิวเตอร์ผู้ใช้สามารถตรวจสอบและแก้ไขค่าของตัวแปร ภายในโปรแกรม และแม้กระทั่งเรียกใช้ฟังก์ชันต่างๆโดยไม่ขึ้นอยู่กับพฤติกรรมปกติของโปรแกรม
แพลตฟอร์มที่รองรับ
โปรเซสเซอร์เป้าหมายของ GDB (ณ ปี 2003) ได้แก่: Alpha , ARM , AVR , H8/300 , Altera Nios / Nios II , System/370 , System/390 , x86 ( 32 บิตและ64 บิต ), IA-64 " Itanium", Motorola 68k , MIPS , PA-RISC , PowerPC , RISC-V , SuperH , SPARCและVAXโปรเซสเซอร์เป้าหมายที่ไม่ค่อยเป็นที่รู้จักซึ่งได้รับการสนับสนุนในเวอร์ชันมาตรฐาน ได้แก่A29K , ARC , ETRAX CRIS , D10V, D30V, FR-30, FR-V , Intel i960 , 68HC11 , Motorola 88000 , MCORE , MN10200, MN10300 , NS32k , Stormy16 และZ8000 (เวอร์ชันใหม่กว่าอาจไม่รองรับบางรุ่นเหล่านี้)
GDB ได้คอมไพล์โปรแกรมจำลองสำหรับเป้าหมายส่วนใหญ่ไว้แล้ว[ 7 ]
การตรวจสอบโค้ดทีละขั้นตอน
คำสั่ง ทั้งสองสามารถใช้เพื่อเลื่อนการดำเนินการไปยังคำสั่งถัดไป n คำสั่ง หากละเว้นn ค่าเริ่มต้นจะเป็น 1 ความแตกต่างระหว่างคำสั่งคือ stepจะติดตามการไหลของการดำเนินการเข้าไปในส่วนภายในของการเรียกฟังก์ชันใดๆ ในขณะที่nextจะดำเนินการฟังก์ชันทั้งหมดและดำเนินการต่อไปยังคำสั่งถัดไปภายในรูทีนปัจจุบัน[ 8 ]next nstep n
คำสั่ง นี้ใช้เพื่อข้ามส่วนของโค้ดที่มีปัญหาหรือย้อนกลับไปยังคำสั่งก่อนหน้าเพื่อตรวจสอบการทำงานอีกครั้ง ตำแหน่งที่ระบุอาจสอดคล้องกับส่วนต่างๆ ของโปรแกรมที่กำลังทำงานอยู่ แต่ผลลัพธ์ที่ไม่คาดคิดอาจเกิดขึ้นสำหรับผู้ที่ไม่คุ้นเคยกับโค้ดเครื่อง[ 9 ]jump location
ค่าการพิมพ์และนิพจน์
เมื่อโปรแกรมหยุดทำงานกลางคัน คำสั่ง print (ย่อว่าp ) สามารถใช้แสดงค่าของตัวแปรหรือนิพจน์โดยใช้ไวยากรณ์ C หรือ C++ ได้ คำสั่ง x (หมายถึง "ตรวจสอบ") คล้ายกัน แต่พารามิเตอร์ของมันคือที่อยู่ในหน่วยความจำ รวมถึงนิพจน์ที่อยู่ด้วย คำสั่งทั้งสองใช้แฟล็กเพื่อระบุรูปแบบการแสดงผล แต่ก็มีความแตกต่างกันอยู่บ้าง เนื่องจากxอนุญาตให้ระบุจำนวนไบต์ได้
เช่น:
print /f myVar #พิมพ์ตัวเลขทศนิยมความแม่นยำสูง (double precision floating point number) x /8bx &foo #พิมพ์ข้อมูล 8 ไบต์ในรูปแบบเลขฐานสิบหก โดยเริ่มจากตำแหน่งหน่วยความจำของ foo
นอกจากนี้ คำสั่ง เรียกจะเรียกใช้ทั้งฟังก์ชันไลบรารีและฟังก์ชันที่ผู้ใช้เขียนขึ้น และค่าที่ส่งคืนจะถูกแสดง[ 10 ]
ค่าที่แสดงจะถูกกำหนดให้กับ ตัวแปร ประวัติค่า พิเศษโดยอัตโนมัติ ซึ่งเริ่มต้นด้วยเครื่องหมาย $ ตามด้วยหมายเลขลำดับ จากนั้นสามารถแสดงซ้ำได้โดยใช้คำสั่ง print [ 10 ] : 547 [ 11 ]
เช่น:
เรียกใช้ getpid() 1 ดอลลาร์ = 23995
นอกจากนี้ยังสามารถใช้ คำสั่ง setเพื่อสร้างตัวแปรอำนวยความสะดวกสำหรับการใช้งานระหว่างเซสชัน gdb ได้อีกด้วย [ 12 ]
เช่น:
ตั้งค่า $foo=i+42
ถ้าอาร์กิวเมนต์ของฟังก์ชัน printเป็นอาร์เรย์หรือโครงสร้างข้อมูล ระบบจะแสดงผลองค์ประกอบทั้งหมด แต่สามารถใช้ไวยากรณ์ต่อไปนี้เพื่อแสดงช่วงย่อยของอาร์เรย์ได้:
เช่น:
print myArray[10]@10 #แสดงองค์ประกอบ 10 รายการแรกของอาร์เรย์ เริ่มต้นที่ myArray[4] [ 10 ] : 546
จุดหยุดและจุดเฝ้าระวัง
เบรกพอยต์และวอชพอยต์ใช้เมื่อต้องการตรวจสอบโปรแกรมก่อนที่จะเกิดสถานการณ์ที่ทราบว่าอาจเกิดข้อผิดพลาด ทั้งเบรกพอยต์และวอชพอยต์จะได้รับหมายเลขประจำตัวเป็นจำนวนเต็ม 1, 2, 3... ซึ่งสามารถใช้เพื่อเปิดใช้งาน ปิดใช้งานหรือลบได้คำสั่งนี้จะแสดงเบรกพอยต์ทั้งหมดและสถานะปัจจุบันของเบรกพอยต์เหล่านั้น info break|watch
เบรกพอยต์ใช้เพื่อหยุดการทำงานของโปรแกรม ณ บรรทัดที่ระบุในโค้ด หรือเมื่อเข้าสู่ฟังก์ชันขณะรันในดีบักเกอร์ เช่นจะหยุดที่บรรทัดที่ 42 ของไฟล์ที่ระบุ หากไม่ระบุชื่อไฟล์ การอ้างอิงจะเป็นไฟล์ปัจจุบัน breaksourcefile:42
เบรกพอยต์แบบมีเงื่อนไขจะหยุดการทำงานที่บรรทัดที่ระบุเมื่อเงื่อนไขที่กำหนดเป็นจริง เช่น:
หยุดไฟล์ต้นฉบับที่ 275 หากหมายเลขผลิตภัณฑ์เท่ากับ 1275
คำสั่ง นี้อนุญาตให้เพิ่มเงื่อนไขให้กับจุดหยุดที่กำหนดไว้[ 13 ]conditionbreakNumexpression
Watchpoint จะหยุดการทำงานของโปรแกรมเมื่อค่าของตัวแปรหรือนิพจน์เปลี่ยนแปลง ไม่ว่าจะเกิดขึ้นที่ส่วนใดของโปรแกรมก็ตาม โดยค่าเริ่มต้น หากเป็นไปได้ gdb จะตรวจสอบตำแหน่งหน่วยความจำที่เกิดการเปลี่ยนแปลง ซึ่งเป็นคุณสมบัติที่มีประโยชน์ เนื่องจากตัวชี้หลายตัวอาจอ้างอิงถึงที่อยู่เดียวกัน ในทางกลับกัน watchpoint ที่เป็นซอฟต์แวร์ซึ่งทำงานช้ากว่า จะติดตามเฉพาะตัวแปรเท่านั้น
คำสั่ง rwatch และawatchจะหยุดโปรแกรมทุกครั้งที่มีการอ่านตำแหน่งหน่วยความจำหรือตัวแปร[ 14 ]
คุณสมบัติเงื่อนไขอีกประการหนึ่งของทั้งนาฬิกาและเบรกพอยต์คือคำสั่ง ที่ไม่สนใจเกณฑ์การหยุดจนกว่าการดำเนินการนับจะผ่าน[ 15 ]ignorebreakNumcount
คำ สั่ง displayจะเตรียม gdb ให้แสดงค่าของนิพจน์โดยอัตโนมัติทุกครั้งที่หยุด คำสั่ง display หลาย คำสั่งจะสะสมกัน และสามารถจัดรูปแบบเอาต์พุตได้โดยใช้แฟล็กเดียวกันกับที่มีในคำสั่งx [ 10 ] : 551–552
เฟรมสแต็ก
เมื่อโปรแกรมหยุดทำงาน อาจมีการเรียกใช้ฟังก์ชันหลายระดับ แต่ละระดับของการเรียกใช้ฟังก์ชันเรียกว่าเฟรม และกลุ่มของเฟรมเรียกว่าสแต็กเฟรม เมื่อการทำงานหยุดลง เราสามารถเลื่อนขึ้นหรือลงไปยังเฟรมที่ต้องการเพื่อตรวจสอบค่าของตัวแปรหรือนิพจน์ในระดับใดระดับหนึ่ง ซึ่งมีประโยชน์ในการช่วยแก้ไขข้อบกพร่องของโปรแกรม คำสั่ง backtraceจะแสดงรายการเฟรมทั้งหมดในสแต็ก คำสั่ง info argsจะแสดงอาร์กิวเมนต์ทั้งหมดที่ส่งไปยังเฟรมปัจจุบัน และ คำสั่ง info localจะแสดงรายการตัวแปรที่มีให้พร้อมกับค่าของตัวแปรเหล่านั้น[ 16 ]
การสนับสนุนการเขียนสคริปต์
GDB มีความสามารถในการกำหนดรูทีนคำสั่งที่สามารถใช้เพื่อทำให้ชุดคำสั่ง gdb ที่ทำซ้ำบ่อยๆ เป็นไปโดยอัตโนมัติ ซึ่งประกอบด้วยคำสั่ง gdb ที่วางอยู่ระหว่างกำหนด และคำสั่ง endพารามิเตอร์ของรูทีนเหล่านี้ไม่ได้ถูกประกาศด้วยชื่อ แต่จะถูกส่งผ่านในตัวแปรพิเศษ$arg1, $arg2, $arg3 ... โดยมีตัวแปรพิเศษ$ argcแทนจำนวนอาร์กิวเมนต์บรรทัดคำสั่ง
นอกจากนี้ gdb ยังรวมถึงถ้า /อื่นๆและในขณะที่บล็อกถูกยุติด้วยendเช่นเดียวกับลูปเบรกและคำสั่ง loop_continueเพื่อจัดการการควบคุมการไหลของโปรแกรม [ 17 ]
เช่น:
# สคริปต์สำหรับตั้งค่าพรอมต์ gdb และตั้งเบรกพอยต์define cmd ตั้งค่าข้อความแจ้งเตือน "ตัวดีบักเกอร์ของฉัน> " ตั้งค่าการพิมพ์แบบสวยงาม# แสดงโครงสร้างบนหลายบรรทัดหาก $argc==0 พิมพ์ "ไม่มีอาร์กิวเมนต์สำหรับคำสั่งนี้" มิฉะนั้นให้หยุด $arg0 จบจบ
ลองพิจารณาว่าเรากำลังดีบักโปรแกรมภาษา C ที่มีโครงสร้างข้อมูลแบบลิสต์เชื่อมโยง ทั่วไป โดยมีค่านำหน้า และช่อง ถัดไปที่ชี้ไปยังองค์ประกอบถัดไป คำสั่งต่อไปนี้จะใช้ลูป whileเพื่อแสดงองค์ประกอบทั้งหมด: [ 18 ]
กำหนด p_generic_list ตั้งค่าตัวแปร $n = $arg0 ในขณะที่ $n พิมพ์ *($n) ตั้งค่าตัวแปร $n = $n->next จบจบ
คำสั่งที่กำหนดไว้ในไฟล์.gdbinitจะถูกโหลดโดยอัตโนมัติเมื่อเริ่มต้นเซสชัน gdb นอกจากนี้ยังสามารถบันทึกคำสั่งไว้ในไฟล์ทั่วไปและโหลดโดยใช้คำสั่ง source ได้อีกด้วย
ตั้งแต่เวอร์ชัน 7.0 เป็นต้นไป คุณสมบัติใหม่ได้แก่ การสนับสนุนการเขียนสคริปต์Python [ 19 ]และตั้งแต่เวอร์ชัน 7.8 เป็นต้นไปยังรองรับการเขียนสคริปต์GNU Guile ซึ่งใช้ Scheme (ภาษาโปรแกรม)เป็น พื้นฐาน [ 20 ]
การดีบักแบบย้อนกลับได้
ตั้งแต่เวอร์ชัน 7.0 เป็นต้นมา มีการรองรับ "การดีบักแบบย้อนกลับ" ซึ่งอนุญาตให้เซสชันการดีบักย้อนกลับได้ คล้ายกับการย้อนกลับโปรแกรมที่ขัดข้องเพื่อดูว่าเกิดอะไรขึ้น คุณสมบัตินี้ใช้หน่วยความจำมากและทำให้การทำงานช้าลง โดยมีขีดจำกัดเริ่มต้นที่ 20,000 คำสั่ง ขั้นตอนที่แนะนำคือการตั้งเบรกพอยต์ก่อนและหลังปัญหาที่สงสัย จากนั้นออก คำสั่ง บันทึกเมื่อโปรแกรมหยุดที่เบรกพอยต์แรก ดำเนินการต่อจนถึงเบรกพอยต์ที่สอง จากนั้นสามารถใช้คำสั่ง reverse-step , reverse-nextและreverse-continue เพื่อย้อนกลับการทำงาน ยกเลิกการเปลี่ยนแปลงในตัวแปรทีละส่วน อย่างไรก็ตาม การดีบักแบบย้อนกลับจะไม่ยกเลิกการกระทำ เช่น เอาต์พุตคอนโซล และจะไม่ออกเหตุการณ์ภายนอกใหม่ เช่น การขัดจังหวะหรือแพ็กเก็ตเครือข่ายขาเข้า[ 13 ] : 80-82 [ 21 ]
การดีบักระยะไกล
GDB มีโหมด "ระยะไกล" ซึ่งมักใช้เมื่อทำการดีบักระบบฝังตัว การทำงานระยะไกลคือเมื่อ GDB ทำงานบนเครื่องหนึ่งและโปรแกรมที่กำลังดีบักทำงานบนอีกเครื่องหนึ่ง GDB สามารถสื่อสารกับ "stub" ระยะไกลที่เข้าใจโปรโตคอล GDB ผ่านอุปกรณ์อนุกรมหรือ TCP/IP [ 22 ]สามารถสร้างโปรแกรม stub ได้โดยการเชื่อมโยงกับไฟล์ stub ที่เหมาะสมซึ่งมีให้พร้อมกับ GDB ซึ่งใช้ฝั่งเป้าหมายของโปรโตคอลการสื่อสาร[ 23 ]หรืออีกทางหนึ่ง สามารถใช้ gdbserverเพื่อดีบักโปรแกรมจากระยะไกลโดยไม่จำเป็นต้องเปลี่ยนแปลงโปรแกรมแต่อย่างใด
โหมดเดียวกันนี้ยังถูกใช้โดยKGDBสำหรับการดีบักเคอร์เนล Linux ที่กำลังทำงาน ในระดับซอร์สโค้ดด้วย gdb ด้วย KGDB นักพัฒนาเคอร์เนลสามารถดีบักเคอร์เนลได้ในลักษณะเดียวกับการดีบักโปรแกรมแอปพลิเคชัน ทำให้สามารถวางเบรกพอยต์ในโค้ดเคอร์เนล ก้าวผ่านโค้ด และสังเกตตัวแปรได้ บนสถาปัตยกรรมที่มีรีจิสเตอร์ดีบักฮาร์ดแวร์ สามารถตั้งค่าวอชพอยต์ซึ่งจะเรียกใช้เบรกพอยต์เมื่อมีการเรียกใช้หรือเข้าถึงที่อยู่หน่วยความจำที่ระบุ KGDB ต้องการเครื่องเพิ่มเติมที่เชื่อมต่อกับเครื่องที่จะดีบักโดยใช้สายอนุกรมหรืออีเธอร์เน็ตบนFreeBSDยังสามารถดีบักโดยใช้การเข้าถึงหน่วยความจำโดยตรง (DMA) ของ FireWire ได้อีกด้วย [ 24 ]
ส่วนติดต่อผู้ใช้แบบกราฟิก
ดีบักเกอร์ไม่มีอินเทอร์เฟซผู้ใช้แบบกราฟิก ของตัวเอง และโดยค่าเริ่มต้นจะใช้อินเทอร์เฟซบรรทัดคำสั่งแม้ว่าจะมี อินเทอร์ เฟซผู้ใช้แบบข้อความก็ตาม มีการสร้างส่วนหน้าหลายส่วนสำหรับดีบักเกอร์ เช่น UltraGDB, Xxgdb, Data Display Debugger (DDD), Nemiver, KDbg, ดีบักเกอร์ของXcode , GDBtk/Insight, Gede, [ 25 ] Seer, [ 26 ] และ HP Wildebeest Debugger GUI (WDB GUI) IDEเช่นCodelite , Code::Blocks , Dev-C++ , Geany , GNAT Programming Studio (GPS), KDevelop , Qt Creator , Lazarus , MonoDevelop , Eclipse , NetBeansและVisual Studioสามารถเชื่อมต่อกับ GDB ได้GNU Emacsมี "โหมด GUD" และมีเครื่องมือสำหรับVim (เช่น clewn) ซึ่งมีคุณสมบัติคล้ายกับดีบักเกอร์ที่พบใน IDE
เครื่องมือดีบักอื่นๆ บางตัวได้รับการออกแบบมาให้ทำงานร่วมกับ GDB ได้ เช่นเครื่องมือตรวจ จับการรั่วไหลของหน่วยความจำ
ภายใน
GDB ใช้การเรียกใช้ระบบที่ชื่อว่าptrace (ชื่อนี้เป็นตัวย่อของ "process trace") เพื่อสังเกตและควบคุมการทำงานของกระบวนการอื่น รวมถึงตรวจสอบและเปลี่ยนแปลงหน่วยความจำและรีจิสเตอร์ของกระบวนการนั้น
| คำสั่ง gdb ทั่วไป | การเรียกใช้ ptrace ที่เกี่ยวข้อง |
|---|---|
(gdb)start | PTRACE_TRACEME – ทำให้พาเรนต์เป็นตัวติดตาม (เรียกใช้โดยผู้ถูกติดตาม) |
(gdb)attach PID | PTRACE_ATTACH – เชื่อมต่อกับกระบวนการที่กำลังทำงานอยู่ |
(gdb)step | PTRACE_SINGLESTEP – ดำเนินการไปยังคำสั่งถัดไป |
(gdb)stop | kill(child_pid, SIGSTOP)(หรือPTRACE_INTERRUPT ) |
(gdb)continue | การติดตาม_ต่อเนื่อง |
(gdb)info registers | PTRACE_GET(FP)REGS(ET)และPTRACE_SET(FP)REGS(ET) |
(gdb)x | PTRACE_PEEKTEXTและPTRACE_POKETEXT |
การตั้งจุดหยุด (breakpoint) ทำได้โดยการแทนที่คำสั่งที่ตำแหน่งหน่วยความจำที่กำหนดด้วยคำสั่งพิเศษอื่น การเรียกใช้คำสั่งจุดหยุดจะทำให้เกิดสัญญาณ SIGTRAP
ดูเพิ่มเติม
- ไลบรารีตัวระบุไฟล์ไบนารี (libbfd)
- dbx
- DDDคือGUIสำหรับ GDB และดีบักเกอร์ อื่นๆ
- จีดีบีเซิร์ฟเวอร์
- แอลแอลดีบี
ลิงก์ภายนอก
- เว็บไซต์อย่างเป็นทางการ ,คลังเก็บข้อมูล GDB Git อย่างเป็นทางการ
- UltraGDB: การดีบัก Visual C/C++ ด้วย GDB บน Windows และ Linux เก็บถาวรเมื่อ 2017-12-12 ที่Wayback Machine
- เว็บไซต์ของ "MyGDB: GDB Frontend" ในภาษาเกาหลี
- ปลั๊กอิน Visual Studio สำหรับดีบักด้วย GDB
เอกสารประกอบ
- Richard M. Stallman , Roland Pesch, Stan Shebs และคณะ, การดีบักด้วย GDB ( มูลนิธิซอฟต์แวร์เสรี , 2011) ISBN 978-0-9831592-3-0
- กลไกภายในของ GDB
บทช่วยสอน
- บทช่วยสอนการใช้งาน gdb ของ RMS (โดย Ryan Michael Schmidt ไม่ใช่ Richard Matthew Stallman )
- บทช่วยสอน GDB
- การใช้ Eclipse เป็นส่วนหน้า (Front-End) สำหรับดีบักเกอร์ GDB
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ดีบักเกอร์ GNU
GNU Debugger ( GDB ) เป็น ดีบักเกอร์ แบบพกพา ที่ทำงานบน ระบบ ที่คล้าย Unix หลาย ระบบและใช้งานได้กับ ภาษาโปรแกรม หลายภาษา รวมถึง Ada , Assembly , C , C++ , D , Fortran , Haskell ,...
ประวัติศาสตร์
GDB ถูกเขียนขึ้นครั้งแรกโดย Richard Stallman ในปี 1986 เป็นส่วนหนึ่งของระบบ GNU ของเขา หลังจากที่ GNU Emacs ของเขา "มีความเสถียรพอสมควร" [ 4 ] GDB เป็น ซอฟต์แวร์ฟรี ที่เผยแพร่ภายใต้ ใบอนุญาตสาธารณะทั่วไปของ GNU (GPL) โดยจำลองมาจาก ดีบักเกอร์ DBX...
คุณสมบัติทางเทคนิค
GDB มีฟังก์ชันการทำงานที่ครอบคลุมสำหรับการติดตาม ตรวจสอบ และเปลี่ยนแปลงการทำงานของ โปรแกรมคอมพิวเตอร์ ผู้ใช้สามารถตรวจสอบและแก้ไขค่าของ ตัวแปร ภายในโปรแกรม และแม้กระทั่งเรียกใช้ ฟังก์ชันต่างๆ โดยไม่ขึ้นอยู่กับพฤติกรรมปกติของโปรแกรม
แพลตฟอร์มที่รองรับ
โปรเซสเซอร์เป้าหมายของ GDB (ณ ปี 2003) ได้แก่: Alpha , ARM , AVR , H8/300 , Altera Nios / Nios II , System/370 , System/390 , x86 ( 32 บิต และ 64 บิต ), IA-64 " Itanium", Motorola 68k , MIPS , PA-RISC , PowerPC , RISC-V , SuperH , SPARC และ VAX...