# DWARF

DWARF és un format de dades de depuració estandarditzat àmpliament utilitzat. DWARF es va dissenyar originalment juntament amb el format executable i enllaçable (ELF), tot i que és independent dels formats de fitxer d'objectes. El nom és un complement de fantasia medieval a "ELF" que no tenia cap significat oficial, tot i que el nom "Depuració amb formats de registre arbitraris" s'ha proposat des de llavors com a retroacrònim.
DWARF es va originar amb el compilador C i el depurador sdb a Unix System V Release 4 (SVR4).

## Història

La primera versió de DWARF va demostrar que utilitzava quantitats excessives d'emmagatzematge, i un successor incompatible, DWARF-2, la va substituir i va afegir diversos esquemes de codificació per reduir la mida de les dades. DWARF no va obtenir immediatament l'acceptació universal; per exemple, quan Sun Microsystems va adoptar ELF com a part del seu trasllat a Solaris, van optar per continuar utilitzant stabs, en una incrustació coneguda com "stabs-in-elf". Linux va seguir el mateix, i DWARF-2 no es va convertir en el predeterminat fins a finals dels anys noranta.
El grup de treball DWARF del Free Standards Group va llançar la versió 3 de DWARF el gener de 2006, afegint (entre altres coses) suport per a espais de noms C++, Fortran 90.allocatabledades i tècniques addicionals d'optimització del compilador.
El comitè DWARF va publicar la versió 4 de DWARF, que ofereix "compressió de dades millorada, millor descripció del codi optimitzat i suport per a noves característiques del llenguatge en C++", el 2010.
La versió 5 del format DWARF es va publicar el febrer de 2017. "Incorpora millores en molts àmbits: millor compressió de dades, separació de dades de depuració dels fitxers executables, millora de la descripció de macros i fitxers font, cerca més ràpida de símbols, millora de la depuració del codi optimitzat, així com nombroses millores en la funcionalitat i el rendiment".

## Estructura

DWARF utilitza una estructura de dades anomenada entrada d'informació de depuració (DIE) per representar cada variable, tipus, procediment, etc. Un DIE té una etiqueta (p. ex.,DW_TAG_variable ,DW_TAG_pointer_type ,DW_TAG_subprogram ) i atributs (parells clau-valor). Un DIE pot tenir DIE (fills) imbricats, formant una estructura d'arbre. Un atribut DIE pot fer referència a un altre DIE en qualsevol lloc de l'arbre; per exemple, un DIE que representa una variable tindria unDW_AT_typeEntrada que apunta al DIE que descriu el tipus de variable.
Per estalviar espai, dues taules grans necessàries pels depuradors simbòlics es representen com a instruccions codificades per bytes per a màquines d'estats finits simples i de propòsit especial. La taula de números de línia, que mapeja les ubicacions del codi amb les ubicacions del codi font i viceversa, també especifica quines instruccions formen part dels pròlegs i epílegs de funcions. La taula d'informació del marc de trucada permet als depuradors localitzar marcs a la pila de trucades.

## Referències

* 1 2 Michael J. Eager. «Introduction to the DWARF Debugging Format» (en anglès), 01-04-2012. [Consulta: 8 gener 2015].
* ↑ Michael J. Eager. «Introduction to the DWARF Debugging Format» (en anglès), 01-04-2012. [Consulta: 8 gener 2015].
* ↑ «DWARF Version 4 Released» (en anglès). The DWARF committee, June 16, 2010. Arxivat de l'original el 2020-07-30. [Consulta: 24 juny 2010].
* ↑ «DWARF Version 5 Standard Released» (en anglès). The DWARF committee, February 15, 2017. [Consulta: 7 agost 2017].
* ↑ «DWARF 5 Standard» (en anglès). The DWARF committee, February 15, 2017. [Consulta: 7 agost 2017].