อ่าน 3 นาที
แคระ
DWARFเป็นรูปแบบข้อมูลการดีบัก มาตรฐานที่ใช้กันอย่างแพร่หลาย DWARF ได้รับการออกแบบร่วมกับExecutable and Linkable Format (ELF) ในตอนแรก แม้ว่าจะเป็นอิสระจากรูปแบบไฟล์ออบเจ็กต์ ก็ตาม.
แคระ
DWARFเป็นรูปแบบข้อมูลการดีบัก มาตรฐานที่ใช้กันอย่างแพร่หลาย DWARF ได้รับการออกแบบร่วมกับExecutable and Linkable Format (ELF) ในตอนแรก แม้ว่าจะเป็นอิสระจากรูปแบบไฟล์ออบเจ็กต์ ก็ตาม [ 1 ]ชื่อนี้เป็น คำเสริม ในจินตนาการยุคกลางของ "ELF" ซึ่งไม่มีความหมายอย่างเป็นทางการ แม้ว่าชื่อ "Debugging With Arbitrary Record Formats" จะถูกเสนอให้เป็นคำย่อ ใน ภายหลัง ก็ตาม [ 1 ]
DWARF มีต้นกำเนิดมาจากคอมไพเลอร์ C และดีบักเกอร์ sdb ในUnix System V Release 4 (SVR4) [ 1 ]
ประวัติศาสตร์
เวอร์ชันแรกของ DWARF พิสูจน์แล้วว่าใช้พื้นที่จัดเก็บข้อมูลมากเกินไป และเวอร์ชันต่อมาที่ไม่เข้ากันอย่าง DWARF-2 ได้เข้ามาแทนที่และเพิ่มรูปแบบการเข้ารหัสต่างๆ เพื่อลดขนาดข้อมูล DWARF ไม่ได้รับการยอมรับอย่างแพร่หลายในทันที ตัวอย่างเช่น เมื่อSun Microsystemsนำ ELF มาใช้เป็นส่วนหนึ่งของการเปลี่ยนไปใช้Solaris พวกเขาเลือกที่จะใช้ stabsต่อไปในรูปแบบการฝังที่เรียกว่า "stabs-in-elf" Linuxก็ทำตามเช่นกัน และ DWARF-2 ก็ไม่ได้กลายเป็นค่าเริ่มต้นจนกระทั่งปลายทศวรรษ 1990
กลุ่มงาน DWARF ของกลุ่มมาตรฐานเสรีได้เผยแพร่ DWARF เวอร์ชัน 3 ในเดือนมกราคม พ.ศ. 2549 [ 2 ]โดยเพิ่ม (ในบรรดาสิ่งอื่นๆ) การสนับสนุน เนมสเปซ C++ , ข้อมูล ที่จัดสรรได้ของFortran 90 และ เทคนิค การเพิ่มประสิทธิภาพคอมไพเลอร์เพิ่มเติม
ในปี 2553 คณะกรรมการ DWARF ได้เผยแพร่ DWARF เวอร์ชัน 4 ซึ่งนำเสนอ "การบีบอัดข้อมูลที่ดีขึ้น คำอธิบายโค้ดที่ได้รับการปรับให้เหมาะสมยิ่งขึ้น และการสนับสนุนคุณสมบัติภาษาใหม่ใน C++" [ 3 ]
รูปแบบ DWARF เวอร์ชัน 5 ได้รับการเผยแพร่ในเดือนกุมภาพันธ์ พ.ศ. 2560 [ 4 ] [ 5 ]โดย "มีการปรับปรุงในหลายด้าน ได้แก่ การบีบอัดข้อมูลที่ดีขึ้น การแยกข้อมูลการดีบักออกจากไฟล์ปฏิบัติการ คำอธิบายมาโครและไฟล์ต้นฉบับที่ดีขึ้น การค้นหาสัญลักษณ์ที่เร็วขึ้น การดีบักโค้ดที่ได้รับการปรับให้เหมาะสมที่ดีขึ้น รวมถึงการปรับปรุงฟังก์ชันการทำงานและประสิทธิภาพอีกมากมาย"
โครงสร้าง
DWARF ใช้โครงสร้างข้อมูลที่เรียกว่า Debugging Information Entry (DIE) เพื่อแสดงตัวแปร ประเภท ขั้นตอนการทำงาน ฯลฯ แต่ละรายการ DIE ประกอบด้วยแท็ก (เช่นDW_TAG_variable , DW_TAG_pointer_type , DW_TAG_subprogram ) และแอตทริบิวต์ (คู่คีย์-ค่า) DIE สามารถมี DIE ย่อย (ลูก) อยู่ภายในได้ ทำให้เกิด โครงสร้าง แบบต้นไม้แอตทริบิวต์ของ DIE สามารถอ้างอิงถึง DIE อื่นได้ทุกที่ในต้นไม้ ตัวอย่างเช่น DIE ที่แสดงตัวแปรจะมี รายการ DW_AT_typeที่ชี้ไปยัง DIE ที่อธิบายประเภทของตัวแปรนั้น
เพื่อประหยัดพื้นที่ ตารางขนาดใหญ่สองตารางที่จำเป็นสำหรับดีบักเกอร์เชิงสัญลักษณ์จะถูกแทนด้วย คำสั่ง ไบต์โค้ดสำหรับเครื่องสถานะจำกัด แบบง่ายๆ ที่มีวัตถุประสงค์พิเศษ ตารางหมายเลขบรรทัด ซึ่งแมปตำแหน่งโค้ดกับตำแหน่งซอร์สโค้ดและในทางกลับกัน ยังระบุด้วยว่าคำสั่งใดเป็นส่วนหนึ่งของส่วน นำและส่วนท้ายของ ฟังก์ชันตารางข้อมูลเฟรมการเรียกช่วยให้ดีบักเกอร์สามารถระบุตำแหน่งเฟรมบนสแต็กการเรียกได้
DWARF ได้ถูกแบ่งออกเป็นส่วนต่างๆ เช่น .debug_info, [ 6 ] .debug_frame เป็นต้น
| ชื่อส่วน | คำอธิบาย |
|---|---|
| .debug_types | ประกอบด้วยประเภทข้อมูลที่ไม่ใช่ประเภทพื้นฐาน จัดเก็บในรูปแบบโครงสร้างแฮชเพื่อให้สามารถลบคำจำกัดความประเภทข้อมูลที่ซ้ำกันได้ง่าย |
| .debug_str | ประกอบด้วยสตริงที่ไม่ถูกจัดไว้ในส่วน .debug_info และ .debug_types ตัวเชื่อมโยงจะรวมตารางสตริงเพื่อกำจัดสตริงที่ซ้ำกัน |
| .debug_aranges | ประกอบด้วยรายการช่วงเพื่อกำหนดว่าส่วนใดของข้อความในโปรแกรมเป็นของโปรแกรมย่อยและหน่วยการคอมไพล์ใดบ้าง |
| .debug_loc | ประกอบด้วยรายการของนิพจน์ที่อธิบายตำแหน่งของตัวแปรให้แก่ดีบักเกอร์โดยอิงจากค่า PC |
| .ดีบัก_ไลน์ | ระบุคำอธิบายเกี่ยวกับการจับคู่ค่าจากพีซีกับตำแหน่งต้นทาง |
| .debug_abbrev | ระบุคำจำกัดความของรหัสย่อที่ใช้ในการอธิบายข้อมูลการดีบักในส่วน .debug_info และ .debug_types |
| .debug_pubnames | เป็นดัชนีที่ช่วยในการดึงข้อมูลการดีบักสัญลักษณ์โดยไม่ต้องสแกนไฟล์ออบเจ็กต์ |
| .debug_pubtypes | เป็นดัชนีที่ช่วยในการดึงข้อมูลประเภทต่างๆ |
.debug_info
ส่วน.debug_infoของELFประกอบด้วยข้อมูลที่สร้างโดยคอมไพเลอร์เพื่ออธิบายซอร์สโค้ดขณะดีบักโดยเก็บสัญลักษณ์และประเภท ขอบเขต ไฟล์ หมายเลขบรรทัด ฯลฯ ส่วน .debug_info [ 7 ]เป็นหนึ่งในส่วนประกอบหลักของไฟล์ข้อมูลดีบัก DWARF [ 8 ] [ 9 ] [ 10 ]ซึ่งสร้างโดยคอมไพเลอร์เมื่อใช้สวิตช์ -g หรือรูปแบบต่างๆ
เครื่องมือ
Libdwarf เป็นไลบรารีที่ให้การเข้าถึงข้อมูลการดีบัก DWARF ในไฟล์ปฏิบัติการและไฟล์ออบเจ็กต์[ 11 ]
อ่านเพิ่มเติม
Michael Eager ประธานคณะกรรมการมาตรฐาน DWARF ได้เขียนบทนำเกี่ยวกับรูปแบบการดีบักและ DWARF 3 บทนำเกี่ยวกับรูปแบบการดีบัก DWARF [ 1 ]
ลิงก์ภายนอก
- เว็บไซต์อย่างเป็นทางการ
- Libdwarfเป็นไลบรารีภาษาซีที่ออกแบบมาเพื่อลดความซับซ้อนในการอ่าน (และเขียน) แอปพลิเคชันที่ใช้ DWARF2 และ DWARF3
- elfutilsเป็นไลบรารีภาษาซีอีกตัวหนึ่งสำหรับการประมวลผลไฟล์ ELF/DWARF
- วิธีการทำงานของดีบักเกอร์ : ตอนที่ 3 - ข้อมูลการดีบัก
- รูปแบบการดีบัก DWARF และ STAB
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ แคระ
DWARFเป็นรูปแบบข้อมูลการดีบัก มาตรฐานที่ใช้กันอย่างแพร่หลาย DWARF ได้รับการออกแบบร่วมกับExecutable and Linkable Format (ELF) ในตอนแรก แม้ว่าจะเป็นอิสระจากรูปแบบไฟล์ออบเจ็กต์ ก็ตาม.
ประวัติศาสตร์
เวอร์ชันแรกของ DWARF พิสูจน์แล้วว่าใช้พื้นที่จัดเก็บข้อมูลมากเกินไป และเวอร์ชันต่อมาที่ไม่เข้ากันอย่าง DWARF-2 ได้เข้ามาแทนที่และเพิ่มรูปแบบการเข้ารหัสต่างๆ เพื่อลดขนาดข้อมูล DWARF ไม่ได้รับการยอมรับอย่างแพร่หลายในทันที ตัวอย่างเช่น เมื่อ Sun Microsystems นำ...
โครงสร้าง
DWARF ใช้โครงสร้างข้อมูลที่เรียกว่า Debugging Information Entry (DIE) เพื่อแสดงตัวแปร ประเภท ขั้นตอนการทำงาน ฯลฯ
.debug_info
ส่วน .debug_info ของ ELF ประกอบด้วยข้อมูลที่สร้างโดย คอมไพเลอร์ เพื่ออธิบาย ซอร์สโค้ด ขณะ ดีบัก โดยเก็บสัญลักษณ์และประเภท ขอบเขต ไฟล์ หมายเลขบรรทัด ฯลฯ ส่วน .