stringtranslate.com

ENANO

DWARF es un formato de datos de depuración estandarizado y ampliamente utilizado . DWARF se diseñó originalmente junto con el formato ejecutable y vinculable (ELF), aunque es independiente de los formatos de archivos de objetos . [1] El nombre es un complemento de fantasía medieval de "ELF" que no tenía ningún significado oficial, aunque desde entonces se ha propuesto el nombre "Debugging With Arbitrary Record Formats" como un backronym . [1]

DWARF se originó con el compilador de C y el depurador sdb en Unix System V Release 4 (SVR4). [1]

Historia

La primera versión de DWARF demostró utilizar cantidades excesivas de almacenamiento y un sucesor incompatible, DWARF-2, la reemplazó y agregó varios esquemas de codificación para reducir el tamaño de los datos. DWARF no obtuvo inmediatamente aceptación universal; por ejemplo, cuando Sun Microsystems adoptó ELF como parte de su transición a Solaris , optaron por continuar usando stabs , en una incorporación conocida como "stabs-in-elf". Linux hizo lo mismo y DWARF-2 no se convirtió en el predeterminado hasta finales de los años 1990.

El grupo de trabajo DWARF del Free Standards Group lanzó la versión 3 de DWARF en enero de 2006, [2] agregando (entre otras cosas) soporte para espacios de nombres C++ , datos asignables de 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 funciones del 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 (por ejemplo, DW_TAG_variable , DW_TAG_pointer_type , DW_TAG_subprogram ) y atributos (pares clave-valor). Un DIE puede tener DIE (secundarios) anidados, formando una estructura de árbol . Un atributo DIE puede hacer referencia a otro DIE en cualquier parte 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 en 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 forman parte de los prólogos y epílogos de funciones. La tabla de información de marco de llamada permite a los depuradores localizar marcos en la pila de llamadas .

DWARF se ha dividido en diferentes secciones como .debug_info , [6] .debug_frame, etc.

Herramientas

Libdwarf es una biblioteca que proporciona acceso a la información de depuración DWARF en archivos ejecutables y archivos objeto. [7]

Otras lecturas

Michael Eager, presidente del Comité de Estándares 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

  1. ^ abcd Michael J. Eager (abril de 2012). "Introducción al formato de depuración DWARF" (PDF) . Consultado el 8 de enero de 2015 .
  2. ^ "Lanzamiento del estándar DWARF versión 3" (Presione soltar). Grupo de Normas Libres. 4 de enero de 2006. Archivado desde el original el 25 de julio de 2011 . Consultado el 25 de junio de 2007 .
  3. ^ "Lanzamiento de la versión 4 de DWARF". El comité ENANO. 16 de junio de 2010. Archivado desde el original el 30 de julio de 2020 . Consultado el 24 de junio de 2010 .
  4. ^ "Lanzamiento del estándar DWARF versión 5". El comité ENANO. 15 de febrero de 2017 . Consultado el 7 de agosto de 2017 .
  5. ^ "Estándar ENANO 5". El comité ENANO. 15 de febrero de 2017 . Consultado el 7 de agosto de 2017 .
  6. ^ .debug_info documentación de IBM
  7. ^ "libdwarf: una interfaz de biblioteca de consumo para DWARF". www.prevanders.net . Consultado el 6 de diciembre de 2023 .

enlaces externos