| 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_infosize- nombre d’octets du DIE encodé (y compris les attributs)tag- type du DIE ; le préfixe conventionnel « DW_TAG_ » est omisunit_name- nom de l’unité de compilation contenant ce DIEunit_offset- position de l’unité de compilation contenant ce DIE dans la section.debug_infoancestor_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é :
namelinkage_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éedecl_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 omisattr_form- manière dont l’attribut est encodé et interprété ; le préfixe conventionnel DW_FORM_ est omisattr_int- valeur entière de l’attribut ; 0 si l’attribut n’a pas de valeur numériqueattr_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) :
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┌─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.