| 입력 | 출력 | 별칭 |
|---|---|---|
| ✔ | ✗ |
설명
DWARF 포맷은 ELF 파일(실행 파일, 라이브러리 또는 객체 파일)에서 DWARF 디버그 심볼을 파싱합니다.
dwarfdump와 비슷하지만 훨씬 빠르고(초당 수백 MB) SQL도 지원합니다.
.debug_info 섹션의 각 Debug Information Entry(DIE)마다 한 개의 행을 생성하며,
DWARF 인코딩에서 트리의 자식 목록을 끝내는 데 사용하는 "null" 엔트리도 포함합니다.
DWARF 포맷은 다음 컬럼을 출력합니다.
offset-.debug_info섹션에서 DIE의 위치size- 인코딩된 DIE의 바이트 수(속성 포함)tag- DIE의 유형이며, 관례적인 "DW_TAG_" 접두사는 생략됩니다unit_name- 이 DIE가 포함된 컴파일 단위의 이름unit_offset- 이 DIE가 포함된 컴파일 단위의.debug_info섹션 내 위치ancestor_tags- 트리에서 현재 DIE의 상위 조상 tag를 담은 배열로, 가장 안쪽에서 가장 바깥쪽 순으로 정렬됩니다ancestor_offsets- 조상의 offset이며ancestor_tags와 같은 순서로 대응됩니다- 편의를 위해 속성 배열에서 중복해서 제공되는 몇 가지 공통 속성:
namelinkage_name- 맹글링된 정규화 전체 이름으로, 일반적으로 함수에만 있지만 모든 함수에 있는 것은 아닙니다decl_file- 이 엔터티가 선언된 소스 코드 파일의 이름decl_line- 이 엔터티가 선언된 소스 코드의 줄 번호
- 속성을 설명하는 병렬 배열:
attr_name- 속성의 이름이며, 관례적인 "DW_AT_" 접두사는 생략됩니다attr_form- 속성이 인코딩되고 해석되는 방식이며, 관례적인 DW_FORM_ 접두사는 생략됩니다attr_int- 속성의 정수 값이며, 숫자 값이 없으면 0입니다attr_str- 속성의 문자열 값이며, 문자열 값이 없으면 비어 있습니다
사용 예시
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.