อ่าน 7 นาที
ดีบัก (คำสั่ง)
ดีบักเกอร์ แบบบรรทัด DEBUG.EXE เป็นคำสั่งภายนอกใน MS-DOS และระบบปฏิบัติการที่เข้ากันได้ OS/2 และ Windows เวอร์ชัน 16 บิต และ 32 บิต[ 1 ]
ดีบัก (คำสั่ง)
| DEBUG.COM (MS-DOS <= 2.0), DEBUG.EXE (MS-DOS >= 3.x) | |
|---|---|
| ผู้เขียนต้นฉบับ | ทิม แพเตอร์สัน |
| นักพัฒนา | ไมโครซอฟต์ , ไอบีเอ็ม , ดิจิทัล รีเสิร์ช , โนเวลล์ , คาลเดรา |
| เขียนเป็น | ภาษาแอสเซมบลี x86 |
| ระบบปฏิบัติการ | MS-DOS , OS/2 , Windows |
| พิมพ์ | ดีบักเกอร์ |
| ใบอนุญาต | MS-DOS v2.0, FreeDOS: MIT OS/2, Windows: ซอฟต์แวร์ที่เป็นกรรมสิทธิ์ |
| เว็บไซต์ | ดีบัก |
ดีบักเกอร์ แบบบรรทัดDEBUG.EXEเป็นคำสั่งภายนอกในMS-DOSและระบบปฏิบัติการที่เข้ากันได้OS/2 และ Windows เวอร์ชัน 16 บิตและ 32 บิต[ 1 ]
โปรแกรม DEBUG สามารถทำหน้าที่เป็นโปรแกรมประกอบโค้ด (assembler) , โปรแกรมแยกโค้ด (disassembler ) หรือ โปรแกรมดัมพ์เลขฐานสิบหก ( hex dump ) ช่วยให้ผู้ใช้สามารถตรวจสอบเนื้อหาในหน่วยความจำ แบบโต้ตอบ (ในรูปแบบภาษาแอสเซมบลีเลขฐานสิบหกหรือASCII ) ทำการเปลี่ยนแปลง และเลือกเรียกใช้ ไฟล์ประเภท COM , EXEและไฟล์อื่นๆ ได้ นอกจากนี้ยังมีคำสั่งย่อยหลายคำสั่งที่ใช้ในการเข้าถึง เซกเตอร์ ของดิสก์พอร์ต I/Oและที่อยู่หน่วยความจำ เฉพาะอีก ด้วย
ภาพรวม

DEBUG.COM(รวมถึงคำสั่งอื่นๆ) ในIBM PC DOS 1.0
DEBUG.EXEตามธรรมเนียมแล้ว คอมพิวเตอร์และระบบปฏิบัติการทุกเครื่องจะมีฟังก์ชันการบำรุงรักษา ซึ่งใช้เพื่อตรวจสอบว่าโปรแกรมทำงานได้อย่างถูกต้องหรือไม่ เดิมทีTim Paterson เขียนโปรแกรม DEBUG ขึ้นมา เพื่อจุดประสงค์นี้ใน86-DOSเมื่อ Paterson เริ่มทำงานให้กับ Microsoft ในช่วงต้นทศวรรษ 1980 เขาได้นำโปรแกรมนี้มาด้วย DEBUG เป็นส่วนหนึ่งของDOS 1.00และถูกรวมอยู่ในMS-DOS / PC DOSและMicrosoft WindowsDEBUG.COM บางเวอร์ชัน เดิมที ไฟล์ปฏิบัติการมีชื่อว่า แต่ได้เปลี่ยนชื่อเป็น DEBUG.EXEใน MS-DOS 3.2 [ 2 ]
Windows XPและเวอร์ชันที่ใหม่กว่ารวมDEBUGระบบย่อย MS-DOSเพื่อรักษาความเข้ากันได้ของ MS-DOS คำสั่ง DOS 16 บิตไม่สามารถใช้งานได้ในWindows เวอร์ชัน64 บิต[ 3 ]
โปรแกรมดีบัก MS-DOS/PC DOS มีข้อจำกัดหลายประการ:
- ในโหมดการประกอบ/ถอดประกอบ จะรองรับเฉพาะโอเปรเตอร์โค้ด8086 เท่านั้น
- สามารถเข้าถึงได้เฉพาะ รีจิสเตอร์ 16 บิตเท่านั้น ไม่สามารถเข้าถึงรีจิสเตอร์ขยาย 32 บิตได้
- เมื่อใช้คำสั่งย่อย "N" สำหรับการตั้งชื่อไฟล์ ชื่อไฟล์จะถูกจัดเก็บไว้ที่ตำแหน่งออฟเซ็ตDS :5D ถึง DS:67 ( พื้นที่ บล็อกควบคุมไฟล์คำนำหน้าส่วนโปรแกรม ) ซึ่งหมายความว่าโปรแกรมสามารถบันทึกไฟล์ได้เฉพาะในรูปแบบชื่อไฟล์ FAT 8.3 เท่านั้น
แพ็คเกจ DEBUG ที่ได้รับการปรับปรุงประกอบด้วยคำสั่ง DEBUG ในNovell DOS 7 , OpenDOS 7.01และDR-DOS 7.02ขึ้นไป ซึ่งเป็นการนำSymbolic Instruction Debugger SID/SID86 เดิมของDigital Research มาเขียนใหม่ [ 4 ]ซึ่งมาพร้อมกับDR DOSเวอร์ชัน ก่อนหน้า [ 5 ] [ 6 ] [ 7 ]โปรแกรมนี้เข้ากันได้อย่างสมบูรณ์กับไวยากรณ์บรรทัดคำสั่ง DEBUG ของ MS-DOS/PC DOS แต่มีการปรับปรุงเพิ่มเติมมากมาย รวมถึงการรองรับ opcode 16 บิตและ 32 บิตจนถึง Pentium โหมดขยาย (/X) พร้อมคำสั่งและโหมดย่อยเพิ่มเติมอีกหลายสิบรายการ ไวยากรณ์บรรทัดคำสั่งที่ได้รับการปรับปรุงอย่างมากพร้อมมาโครที่ผู้ใช้กำหนดได้ และ สิ่งอำนวยความสะดวก ในการดีบักเชิงสัญลักษณ์พร้อมรีจิสเตอร์ที่มีชื่อตารางสัญลักษณ์ ที่โหลด การดำเนินการทางคณิตศาสตร์ และการแปลงฐานรวมถึง ตัวแยกส่วนประกอบ ที่มีคำอธิบายประกอบ[ 8 ] [ 7 ]บางเวอร์ชันยังใช้DPMSเพื่อทำหน้าที่เป็นดีบักเกอร์โหมดป้องกันแบบ "โหมดซ่อนตัว" [ 9 ]
DEBUG เวอร์ชัน FreeDOS ได้รับการ พัฒนาโดย Paul Vojta และได้รับอนุญาตภายใต้MIT License [ 10 ]
มี เวอร์ชัน "DEBUGX" โคลน 32 บิตที่รองรับ โปรแกรม DPMI 32 บิต ด้วยเช่นกัน[ 11 ] Andreas "Japheth" Grech ผู้เขียนส่วนขยาย HX DOSได้พัฒนาเวอร์ชัน DEBUG ที่ได้รับการปรับปรุงตั้งแต่ 0.98 ถึง 1.25 และ Vernon C. Brooks อดีตนัก พัฒนา PC DOSได้เพิ่มเวอร์ชัน 1.26 ถึง 1.32 [ 12 ]
ไวยากรณ์
ดีบัก [[ไดรฟ์:][พาธ] ชื่อไฟล์ [พารามิเตอร์]]
เมื่อเริ่ม DEBUG โดยไม่มีพารามิเตอร์ใดๆ ข้อความแจ้ง DEBUG หรือ "-" จะปรากฏขึ้น จากนั้นผู้ใช้สามารถป้อนคำสั่งย่อยหนึ่งหรือสองตัวอักษรได้หลายคำสั่ง รวมถึง "A" เพื่อเข้าสู่โหมดแอสเซมเบลอร์ "D" เพื่อทำการดัมพ์เลขฐานสิบหก "T" เพื่อติดตาม และ "U" เพื่อถอดประกอบ (แยกส่วน) โปรแกรมในหน่วยความจำ[ 13 ] DEBUG ยังสามารถใช้เป็นตัวแปล "สคริปต์ DEBUG" โดยใช้ไวยากรณ์ต่อไปนี้
ดีบัก <ชื่อไฟล์>
ไฟล์สคริปต์อาจมีคำสั่งย่อย DEBUG และคำสั่งภาษาแอสเซมบลี[ 14 ]วิธีนี้สามารถใช้เพื่อสร้างหรือแก้ไขไฟล์ไบนารีจากไฟล์แบตช์ได้[ 2 ]
การดีบักคำสั่งย่อย
ต่อไปนี้คือรายการคำสั่ง DEBUG ที่มีให้ใช้งานจาก DEBUG.EXE ใน MS-DOS 6.22 ผ่านทาง?คำสั่ง
ประกอบ A [ที่อยู่] เปรียบเทียบที่อยู่ช่วง C ดัมพ์ D [ช่วง] ป้อนที่อยู่อีเมล [รายการ] กรอกรายการช่วง F go G [=ที่อยู่] [ที่อยู่ต่างๆ] ค่าเลขฐานสิบหก H ค่า1 ค่า2 อินพุตพอร์ต I โหลด L [ที่อยู่] [ไดรฟ์] [เซกเตอร์แรก] [หมายเลข] ย้ายที่อยู่ช่วง M ชื่อ N [ชื่อพาธ] [arglist] เอาต์พุต O พอร์ตไบต์ ดำเนินการต่อ P [=ที่อยู่] [หมายเลข] ออกจาก Q ลงทะเบียน R [ลงทะเบียน] ค้นหารายการช่วง S ติดตาม T [=ที่อยู่] [ค่า] ถอดประกอบ U [ช่วง] เขียน W [ที่อยู่] [ไดรฟ์] [เซกเตอร์แรก] [หมายเลข] จัดสรรหน่วยความจำเพิ่มเติม XA [จำนวนหน้า] ยกเลิกการจัดสรรหน่วยความจำที่ขยายแล้ว XD [แฮนด์เดิล] แผนที่หน้าหน่วยความจำขยาย XM [Lpage] [Ppage] [handle] แสดงสถานะหน่วยความจำที่ขยายแล้ว XS
คำสั่ง R แสดงสถานะและค่าของรีจิสเตอร์ปัจจุบัน
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=2A63 ES=2A63 SS=2A63 CS=2A63 IP=0100 NV UP EI PL NZ NA PO NC 2A63:0100 0F DB 0F
ในขณะที่คำสั่ง D แสดงค่าหน่วยความจำปัจจุบัน โดยแสดงทั้งค่าเลขฐานสิบหกและค่า ASCII
2A63:0100 0F 00 B9 8A FF F3 AE 47-61 03 1F 8B C3 48 12 B1 .......Ga....H.. 2A63:0110 04 8B C6 F7 0A 0A D0 D3-48 DA 2B D0 34 00 52 2A ........H.+.4.R\* 2A63:0120 00 DB D2 D3 E0 03 F0 8E-DA 8B C7 16 C2 B6 01 16 ................ 2A63:0130 C0 16 F8 8E C2 AC 8A D0-00 00 4E AD 8B C8 46 8A ..........N...F. 2A63:0140 C2 24 FE 3C B0 75 05 AC-F3 AA A0 0A EB 06 3C B2 .$.<.u.........<. 2A63:0150 75 6D 6D 13 A8 01 50 14-74 B1 BE 32 01 8D 8B 1E อืม...Pt.2.... 2A63:0160 8E FC 12 A8 33 D2 29 E3-13 8B C2 03 C3 69 02 00 ....3.)......i.. 2A63:0170 0B F8 83 FF FF 74 11 26-01 1D E2 F3 81 00 94 FA .....t.&........
และUnassemble จะแสดงการพยายามถอดประกอบหน่วยความจำเดียวกัน
2A63:0100 0F DB 0F 2A63:0101 00B98AFF เพิ่ม [BX+DI+FF8A],BH 2A63:0105 F3 REPZ 2A63:0106 AE SCASB 2A63:0107 47 INC DI 2A63:0108 61 DB 61 2A63:0109 031F เพิ่ม BX,[BX] 2A63:010B 8BC3 MOV AX,BX 2A63:010D 48 DEC AX 2A63:010E 12B1048B เอดีซี ดีเอช,[BX+DI+8B04] 2A63:0112 C6F70A MOV BH,0A 2A63:0115 0AD0 หรือ DL,AL 2A63:0117 D348DA ROR WORD PTR [BX+SI-26],CL 2A63:011A 2BD0 SUB DX,AX 2A63:011C 3400 XOR AL,00 2A63:011E 52 PUSH DX 2A63:011F 2A00 SUB AL,[BX+SI]
ใช้เพื่อวัตถุประสงค์ที่ไม่เกี่ยวข้องกับการดีบัก
โปรแกรม DEBUG มีประโยชน์สำหรับการแก้ไขไฟล์ไบนารีในสภาพแวดล้อมที่มีเพียงระบบปฏิบัติการ DOS ติดตั้งอยู่โดยไม่มีโปรแกรมอื่นใด นอกจากนี้ยังสามารถใช้แก้ไขเซกเตอร์ของดิสก์ ซึ่งเป็นวิธีหนึ่งในการกำจัดไวรัสในเซกเตอร์บูตได้อีกด้วย
ความพร้อมใช้งาน
แม้ว่าเอกสารทางเทคนิคสำหรับคำสั่ง DEBUG จะถูกลบออกไปพร้อมกับการเปิดตัว MS-DOS 3.3 แต่คำสั่งนี้ยังคงอยู่ในชุดการแจกจ่ายมาตรฐาน ซึ่งแตกต่างจากสิ่งที่ทำกับEXE2BIN [ 15 ]
ระบบปฏิบัติการอื่นๆ
ระบบปฏิบัติการIntel ISIS-II [ 16 ]และiRMX 86 , [ 17 ] DEC TOPS-10 [ 18 ]และTOPS-20 , [ 19 ] THEOS/OASIS , [ 20 ] Zilog Z80-RIO , [ 21 ] Stratus OpenVOS , [ 22 ] PC-MOS , [ 23 ]และAROS [ 24 ]ยังมีDEBUGคำสั่ง อีกด้วย
ดูเพิ่มเติม
- รายการคำสั่ง DOS
- DDT (คำสั่ง CP/M) (เทคนิคการดีบักแบบไดนามิก)
- SID (ตัวดีบักเกอร์คำสั่งเชิงสัญลักษณ์)
- SYMDEB
- โค้ดวิว
- เทอร์โบดีบักเกอร์
- ซอฟต์ไอซ์
- ดีบัก (แท็ก)
ลิงก์ภายนอก
- การดีบัก | เอกสารของ Microsoft
- การใช้งาน DEBUG แบบโอเพนซอร์สที่มาพร้อมกับ MS-DOS เวอร์ชัน 2.0
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ดีบัก (คำสั่ง)
ดีบักเกอร์ แบบบรรทัด DEBUG.EXE เป็นคำสั่งภายนอกใน MS-DOS และระบบปฏิบัติการที่เข้ากันได้ OS/2 และ Windows เวอร์ชัน 16 บิต และ 32 บิต[ 1 ]
ภาพรวม
ตามธรรมเนียมแล้ว คอมพิวเตอร์ และ ระบบปฏิบัติการ ทุกเครื่องจะมีฟังก์ชันการบำรุงรักษา ซึ่งใช้เพื่อตรวจสอบว่าโปรแกรมทำงานได้อย่างถูกต้องหรือไม่ เดิมที Tim Paterson เขียนโปรแกรม DEBUG ขึ้นมา เพื่อจุดประสงค์นี้ใน 86-DOS เมื่อ Paterson เริ่มทำงานให้กับ Microsoft...
ไวยากรณ์
เมื่อเริ่ม DEBUG โดยไม่มีพารามิเตอร์ใดๆ ข้อความแจ้ง DEBUG หรือ "-" จะปรากฏขึ้น จากนั้นผู้ใช้สามารถป้อนคำสั่งย่อยหนึ่งหรือสองตัวอักษรได้หลายคำสั่ง รวมถึง "A" เพื่อเข้าสู่โหมดแอสเซมเบลอร์ "D" เพื่อทำการ ดัมพ์เลขฐานสิบหก "T" เพื่อติดตาม และ "U" เพื่อถอดประกอบ...
การดีบักคำสั่งย่อย
ต่อไปนี้คือรายการคำสั่ง DEBUG ที่มีให้ใช้งานจาก DEBUG.EXE ใน MS-DOS 6.22 ผ่านทาง ? คำสั่ง