> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8a08bda2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Documentación sobre el formato DWARF

# DWARF

| Entrada | Salida | Alias |
| ------- | ------ | ----- |
| ✔       | ✗      |       |

<div id="description">
  ## Descripción
</div>

El formato `DWARF` analiza símbolos de depuración DWARF de un archivo ELF (ejecutable, biblioteca o archivo objeto).
Es similar a `dwarfdump`, pero mucho más rápido (cientos de MB/s) y admite SQL.
Produce una fila por cada Debug Information Entry (DIE) en la sección `.debug_info`
e incluye entradas "null" que la codificación DWARF utiliza para terminar listas de hijos en el árbol.

<Info>
  `.debug_info` consta de *units*, que corresponden a unidades de compilación:

  * Cada *unit* es un árbol de *DIE*s, con un DIE `compile_unit` como raíz.
  * Cada DIE tiene una *etiqueta* y una lista de *atributos*.
  * Cada atributo tiene un *nombre* y un *valor* (y también una *forma*, que especifica cómo se codifica el valor).

  Los DIE representan elementos del código fuente, y su *etiqueta* indica de qué tipo de elemento se trata. Por ejemplo, hay:

  * funciones (tag = `subprogram`)
  * clases/structs/enums (`class_type`/`structure_type`/`enumeration_type`)
  * variables (`variable`)
  * argumentos de función (`formal_parameter`).

  La estructura en árbol refleja el código fuente correspondiente. Por ejemplo, un DIE `class_type` puede contener DIEs `subprogram` que representan métodos de la clase.
</Info>

El formato `DWARF` genera las siguientes columnas:

* `offset` - posición del DIE en la sección `.debug_info`
* `size` - número de bytes del DIE codificado (incluidos los atributos)
* `tag` - tipo del DIE; se omite el prefijo convencional "DW\_TAG\_"
* `unit_name` - nombre de la unidad de compilación que contiene este DIE
* `unit_offset` - posición de la unidad de compilación que contiene este DIE en la sección `.debug_info`
* `ancestor_tags` - array de etiquetas de los ancestros del DIE actual en el árbol, en orden del más interno al más externo
* `ancestor_offsets` - offsets de los ancestros, en paralelo con `ancestor_tags`
* algunos atributos comunes duplicados del array de atributos por comodidad:
  * `name`
  * `linkage_name` - nombre completo calificado con name mangling; normalmente solo lo tienen las funciones (pero no todas)
  * `decl_file` - nombre del archivo de código fuente donde se declaró esta entidad
  * `decl_line` - número de línea del código fuente donde se declaró esta entidad
* arrays paralelos que describen los atributos:
  * `attr_name` - nombre del atributo; se omite el prefijo convencional "DW\_AT\_"
  * `attr_form` - cómo se codifica e interpreta el atributo; se omite el prefijo convencional DW\_FORM\_
  * `attr_int` - valor entero del atributo; 0 si el atributo no tiene un valor numérico
  * `attr_str` - valor de cadena del atributo; vacío si el atributo no tiene un valor de cadena

<div id="example-usage">
  ## Ejemplo de uso
</div>

El formato `DWARF` puede utilizarse para encontrar las unidades de compilación que tienen el mayor número de definiciones de funciones (incluidas las instanciaciones de plantillas y las funciones de los archivos de cabecera incluidos):

```sql title="Query" theme={null}
SELECT
    unit_name,
    count() AS c
FROM file('programs/clickhouse', DWARF)
WHERE tag = 'subprogram' AND NOT has(attr_name, 'declaration')
GROUP BY unit_name
ORDER BY c DESC
LIMIT 3
```

```text title="Response" theme={null}
┌─unit_name──────────────────────────────────────────────────┬─────c─┐
│ ./src/Core/Settings.cpp                                    │ 28939 │
│ ./src/AggregateFunctions/AggregateFunctionSumMap.cpp       │ 23327 │
│ ./src/AggregateFunctions/AggregateFunctionUniqCombined.cpp │ 22649 │
└────────────────────────────────────────────────────────────┴───────┘

3 rows in set. Elapsed: 1.487 sec. Processed 139.76 million rows, 1.12 GB (93.97 million rows/s., 752.77 MB/s.)
Peak memory usage: 271.92 MiB.
```

<div id="format-settings">
  ## Ajustes de formato
</div>
