Passer au contenu principal
EntréeSortieAlias

Description

Le format DWARF analyse les symboles de débogage DWARF d’un fichier ELF (exécutable, bibliothèque ou fichier objet). Il s’apparente à dwarfdump, mais il est beaucoup plus rapide (des centaines de Mo/s) et prend en charge SQL. Il produit une ligne pour chaque entrée d’information de débogage (DIE) dans la section .debug_info et inclut des entrées « null » que l’encodage DWARF utilise pour marquer la fin des listes d’enfants dans l’arborescence.
.debug_info se compose d’unités, qui correspondent aux unités de compilation :
  • Chaque unité est une arborescence de DIE, avec un DIE compile_unit comme racine.
  • Chaque DIE possède un tag et une liste d’attributs.
  • Chaque attribut possède un nom et une valeur (ainsi qu’une forme, qui indique comment la valeur est encodée).
Les DIE représentent des éléments du code source, et leur tag indique de quel type d’élément il s’agit. Par exemple, on trouve :
  • des fonctions (tag = subprogram)
  • des classes/structs/enums (class_type/structure_type/enumeration_type)
  • des variables (variable)
  • des arguments de fonction (formal_parameter).
La structure arborescente reflète celle du code source correspondant. Par exemple, un DIE class_type peut contenir des DIE subprogram représentant les méthodes de la classe.
Le format DWARF produit les colonnes suivantes :
  • offset - position du DIE dans la section .debug_info
  • size - nombre d’octets du DIE encodé (y compris les attributs)
  • tag - type du DIE ; le préfixe conventionnel « DW_TAG_ » est omis
  • unit_name - nom de l’unité de compilation contenant ce DIE
  • unit_offset - position de l’unité de compilation contenant ce DIE dans la section .debug_info
  • ancestor_tags - tableau des tags des ancêtres du DIE courant dans l’arborescence, dans l’ordre du plus proche au plus éloigné
  • ancestor_offsets - offsets des ancêtres, parallèles à ancestor_tags
  • quelques attributs courants dupliqués à partir du tableau d’attributs par commodité :
    • name
    • linkage_name - nom complet qualifié manglé ; en général, seules les fonctions en ont un (mais pas toutes)
    • decl_file - nom du fichier de code source dans lequel cette entité a été déclarée
    • decl_line - numéro de ligne dans le code source où cette entité a été déclarée
  • tableaux parallèles décrivant les attributs :
    • attr_name - nom de l’attribut ; le préfixe conventionnel « DW_AT_ » est omis
    • attr_form - manière dont l’attribut est encodé et interprété ; le préfixe conventionnel DW_FORM_ est omis
    • attr_int - valeur entière de l’attribut ; 0 si l’attribut n’a pas de valeur numérique
    • attr_str - valeur textuelle de l’attribut ; vide si l’attribut n’a pas de valeur textuelle

Exemple d’utilisation

Le format DWARF peut être utilisé pour trouver les unités de compilation qui comportent le plus de définitions de fonctions (y compris les instanciations de Template et les fonctions provenant des fichiers d’en-tête inclus) :
Query
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
Response
┌─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.

Paramètres de format

Dernière modification le 25 juin 2026