| إدخال | إخراج | الاسم المستعار |
|---|---|---|
| ✔ | ✗ |
الوصف
يقوم تنسيق DWARF بتحليل رموز تصحيح DWARF من ملف ELF (ملف تنفيذي أو مكتبة أو object file).
وهو مشابه لـ dwarfdump، لكنه أسرع بكثير (مئات الميغابايت/الثانية) ويدعم SQL.
وينتج صفًا واحدًا لكل Debug Information Entry (DIE) في القسم .debug_info
ويتضمن إدخالات "null" التي يستخدمها ترميز DWARF لإنهاء قوائم العناصر الفرعية في الشجرة.
يُخرج تنسيق DWARF الأعمدة التالية:
offset- موضع DIE في القسم.debug_infosize- عدد البايتات في DIE المُرمَّز (بما في ذلك attributes)tag- نوع DIE؛ تُحذف البادئة الاصطلاحية "DW_TAG_"unit_name- اسم وحدة الترجمة التي تحتوي على هذا DIEunit_offset- موضع وحدة الترجمة التي تحتوي على هذا DIE في القسم.debug_infoancestor_tags- Array من tags الخاصة بأسلاف DIE الحالي في الشجرة، بالترتيب من الأعمق إلى الأبعدancestor_offsets- offsets الخاصة بالأسلاف، على التوازي معancestor_tags- بعض attributes الشائعة المكررة من مصفوفة attributes للتسهيل:
namelinkage_name- الاسم الكامل المؤهل بعد التشويه؛ ويكون عادةً موجودًا للدوال فقط (ولكن ليس كل الدوال)decl_file- اسم ملف source code الذي أُعلن فيه هذا entitydecl_line- رقم السطر في source code الذي أُعلن فيه هذا entity
- Arrays متوازية تصف attributes:
attr_name- اسم attribute؛ تُحذف البادئة الاصطلاحية "DW_AT_"attr_form- كيفية ترميز attribute وتفسيره؛ تُحذف البادئة الاصطلاحية DW_FORM_attr_int- القيمة الصحيحة للـ attribute؛ وتكون 0 إذا لم تكن للـ attribute قيمة رقميةattr_str- القيمة النصية للـ attribute؛ وتكون فارغة إذا لم تكن للـ attribute قيمة نصية
مثال على الاستخدام
يمكن استخدام تنسيق DWARF للعثور على وحدات الترجمة التي تضم أكبر عدد من تعريفات الدوال (بما في ذلك تجسيدات Template والدوال من ملفات الترويسة المضمّنة):
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.