Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

DWARF

Entrée Sortie Alias

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.

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) :

Querysql
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
Responsetext
┌─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

Navigation