กลับไปหน้าบทความ

อ่าน 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
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=DWARF&oldid=1288225258 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ แคระ

DWARFเป็นรูปแบบข้อมูลการดีบัก มาตรฐานที่ใช้กันอย่างแพร่หลาย DWARF ได้รับการออกแบบร่วมกับExecutable and Linkable Format (ELF) ในตอนแรก แม้ว่าจะเป็นอิสระจากรูปแบบไฟล์ออบเจ็กต์ ก็ตาม.

ประวัติศาสตร์

เวอร์ชันแรกของ DWARF พิสูจน์แล้วว่าใช้พื้นที่จัดเก็บข้อมูลมากเกินไป และเวอร์ชันต่อมาที่ไม่เข้ากันอย่าง DWARF-2 ได้เข้ามาแทนที่และเพิ่มรูปแบบการเข้ารหัสต่างๆ เพื่อลดขนาดข้อมูล DWARF ไม่ได้รับการยอมรับอย่างแพร่หลายในทันที ตัวอย่างเช่น เมื่อ Sun Microsystems นำ...

โครงสร้าง

DWARF ใช้โครงสร้างข้อมูลที่เรียกว่า Debugging Information Entry (DIE) เพื่อแสดงตัวแปร ประเภท ขั้นตอนการทำงาน ฯลฯ

.debug_info

ส่วน .debug_info ของ ELF ประกอบด้วยข้อมูลที่สร้างโดย คอมไพเลอร์ เพื่ออธิบาย ซอร์สโค้ด ขณะ ดีบัก โดยเก็บสัญลักษณ์และประเภท ขอบเขต ไฟล์ หมายเลขบรรทัด ฯลฯ ส่วน .