DWARF
DWARF es un formato de datos de depuración estandarizado ampliamente utilizado. DWARF fue diseñado originalmente junto con Executable and Linkable Format (ELF), aunque es independiente de formatos de fichero objeto.[1] El nombre es un complemento de fantasía medieval a «ELF» (en inglés dwarf es «enano» y elf es «elfo») que no tiene un significado oficial, aunque posteriormente se propuso el retroacrónimo «Debugging With Attributed Record Formats».[1]
Historia
editarLa primera versión de DWARF probó usar 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 aceptación inmediata; por ejemplo, cuando Sun Microsystems adoptó ELF como parte de su mudanza a Solaris, optó por seguir utilizando stabs, en una incrustación conocida como "stabs-in-elf". Linux hizo lo mismo, y DWARF-2 no se convirtió en el predeterminado hasta finales de la década de 1990.
El DWARF Workgroup del Free Standards Group lanzó DWARF versión 3 en enero de 2006,[2] agregando (entre otras cosas) soporte para namespaces de C++, datos asignables de Fortran 90 y técnicas de optimización de compilador adicionales.
El comité de 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 funciones 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 entre datos de depuración y archivos ejecutables, descripción mejorada de macros y archivos fuente, búsqueda más rápida de símbolos, depuración mejorada del código optimizado, así como numerosas mejoras en funcionalidad y rendimiento".
Estructura
editarDWARF utiliza una estructura de datos llamada Debugging Information Entry (DIE) para representar cada variable, tipo, procedimiento, etc. Un DIE tiene una etiqueta (por ejemplo, DW_TAG_variable, DW_TAG_pointer_type, DW_TAG_subprogram) y atributos (pares clave-valor). Un DIE puede tener DIEs anidados (hijos), formando una estructura de árbol. Un atributo DIE puede referirse a otro DIE en cualquier parte del árbol; por ejemplo, un DIE que represente una variable tendrá una entrada DW_AT_type apuntando al DIE que describa el tipo de la variable.
Para ahorrar espacio, dos grandes tablas necesarias para los depuradores simbólicos son representadas como instrucciones bytecode para máquinas de estado finito simples, de propósito especial. La tabla Line Number Table, que asigna ubicaciones de código a ubicaciones de código fuente y viceversa, también especifica qué instrucciones son parte de prólogos de funciones y epílogos. La tabla Call Frame Information permite a los depuradores localizar frames en la pila de llamadas.
Otras lecturas
editarMichael Eager, presidente del DWARF Standards Committee, ha escrito una introducción a los formatos de depuración y DWARF 3, Introduction to the DWARF Debugging Format.[1]
Referencias
editar- ↑ a b c Michael J. Eager (abril de 2012). «Introduction to the DWARF Debugging Format». Consultado el 8 de enero de 2015.
- ↑ «DWARF Version 3 Standard Released». Free Standards Group. 4 de enero de 2006. Archivado desde el original el 25 de julio de 2011. Consultado el 25 de junio de 2007.
- ↑ «DWARF Version 4 Released». The DWARF committee. 16 de junio de 2010. Archivado desde el original el 30 de julio de 2020. Consultado el 24 de junio de 2010.
- ↑ «DWARF Version 5 Standard Released». The DWARF committee. 15 de febrero de 2017. Consultado el 7 de agosto de 2017.
- ↑ «DWARF 5 Standard». The DWARF committee. 15 de febrero de 2017. Consultado el 7 de agosto de 2017.
Enlaces externos
editar- Sitio web oficial
- Libdwarf, una librería C destinada a simplificar la lectura (y escritura) de aplicaciones usando DWARF2, DWARF3.
- How debuggers work: Part 3 - Debugging information
- Debugging formats DWARF and STAB