DWARF es un formato de datos de depuración estandarizado y ampliamente utilizado . DWARF se diseñó originalmente junto con el formato ejecutable y enlazable (ELF), aunque es independiente de los formatos de archivo de objeto . [1] El nombre es un complemento de fantasía medieval de "ELF" que no tenía un significado oficial, aunque desde entonces se ha propuesto el backronym "Debugging With Arbitrary Record Formats". [1]
Historia
La primera versión de DWARF demostró utilizar cantidades excesivas de almacenamiento, y un sucesor incompatible, DWARF-2, lo reemplazó y agregó varios esquemas de codificación para reducir el tamaño de los datos. DWARF no obtuvo una aceptación universal de inmediato; por ejemplo, cuando Sun Microsystems adoptó ELF como parte de su traslado a Solaris , optaron por seguir usando puñaladas , en una incrustación conocida como "puñaladas en elfo". Linux siguió su ejemplo, y DWARF-2 no se convirtió en el predeterminado hasta finales de la década de 1990.
El Grupo de Trabajo DWARF del Grupo de Estándares Libres lanzó la versión 3 de DWARF en enero de 2006, [2] agregando (entre otras cosas) soporte para espacios de nombres C ++ , datos asignables Fortran 90 y técnicas adicionales de optimización del compilador .
El comité DWARF publicó la versión 4 de DWARF, que ofrece "compresión de datos mejorada, mejor descripción del código optimizado y soporte para nuevas características de lenguaje en C ++", en 2010. [3]
La versión 5 del formato DWARF se publicó en febrero de 2017. [4] [5] Incorpora mejoras en muchas áreas: mejor compresión de datos, separación de datos de depuración de archivos ejecutables, descripción mejorada de macros y archivos fuente, búsqueda más rápida de símbolos , depuración mejorada de código optimizado, así como numerosas mejoras en funcionalidad y rendimiento ".
Estructura
DWARF utiliza una estructura de datos llamada Entrada de información de depuración (DIE) para representar cada variable, tipo, procedimiento, etc. Un DIE tiene una etiqueta (p. Ej., DW_TAG_variable , DW_TAG_pointer_type , DW_TAG_subprogram ) y atributos (pares clave-valor). Un DIE puede tener DIE anidados (secundarios), formando una estructura de árbol . Un atributo DIE puede referirse a otro DIE en cualquier lugar del árbol; por ejemplo, un DIE que representa una variable tendría una Entrada DW_AT_type que apunta al DIE que describe el tipo de variable.
Para ahorrar espacio, dos tablas grandes que necesitan los depuradores simbólicos se representan como instrucciones codificadas por bytes para máquinas de estados finitos simples y de propósito especial . La tabla de números de línea, que asigna ubicaciones de código a ubicaciones de código fuente y viceversa, también especifica qué instrucciones son parte de los prólogos y epílogos de funciones . La tabla de información de tramas de llamadas permite a los depuradores localizar tramas en la pila de llamadas .
Otras lecturas
Michael Eager, presidente del Comité de Normas DWARF, ha escrito una introducción a los formatos de depuración y DWARF 3, Introducción al formato de depuración DWARF . [1]
Referencias
- ^ a b c Michael J. Eager (abril de 2012). "Introducción al formato de depuración DWARF" (PDF) . Consultado el 8 de enero de 2015 .
- ^ "DWARF Version 3 Standard Released" (Comunicado de prensa). Grupo de Estándares Libres. 4 de enero de 2006 . Consultado el 25 de junio de 2007 .
- ^ "Lanzamiento de la versión 4 de DWARF" . El comité DWARF. 16 de junio de 2010 . Consultado el 24 de junio de 2010 .
- ^ "Lanzamiento estándar de la versión 5 de DWARF" . El comité DWARF. 15 de febrero de 2017 . Consultado el 7 de agosto de 2017 .
- ^ "Estándar DWARF 5" . El comité DWARF. 15 de febrero de 2017 . Consultado el 7 de agosto de 2017 .
enlaces externos
- Página web oficial
- Libdwarf , una biblioteca en C destinada a simplificar las aplicaciones de lectura (y escritura) utilizando DWARF2, DWARF3.
- elfutils , otra biblioteca de C para el procesamiento de archivos ELF / DWARF.
- Cómo funcionan los depuradores : Parte 3 - Información de depuración
- Formatos de depuración DWARF y STAB