| 입력 | 출력 | 별칭 |
|---|---|---|
| ✔ | ✗ |
설명
DWARF 포맷은 ELF 파일(실행 파일, 라이브러리 또는 객체 파일)에서 DWARF 디버그 심볼을 파싱합니다.
dwarfdump와 비슷하지만 훨씬 빠르고(초당 수백 MB) SQL도 지원합니다.
.debug_info 섹션의 각 Debug Information Entry(DIE)마다 한 개의 행을 생성하며,
DWARF 인코딩에서 트리의 자식 목록을 끝내는 데 사용하는 “null” 엔트리도 포함합니다.
.debug_info는 컴파일 단위에 해당하는 unit으로 구성됩니다.- 각 unit은 루트에
compile_unitDIE가 있는 DIE 트리입니다. - 각 DIE에는 tag와 속성 목록이 있습니다.
- 각 속성에는 name과 value가 있으며(값이 어떻게 인코딩되는지를 지정하는 form도 있습니다).
- 함수(tag =
subprogram) - 클래스/struct/enum(
class_type/structure_type/enumeration_type) - 변수(
variable) - 함수 인수(
formal_parameter).
class_type DIE에는 클래스의 메서드를 나타내는 subprogram DIE가 포함될 수 있습니다.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 인스턴스화와 포함된 헤더 파일의 함수 포함)를 찾는 데 사용할 수 있습니다:
Query
Response