왜소하다

DWARF

DWARF는 널리 사용되는 표준화된 디버깅 데이터 형식입니다.DWARF는 원래 ELF(Executable and Linkable Format)와 함께 설계되었지만 객체 파일 [1]형식과는 독립적입니다.그 이름은 "ELF"에 대한 중세 환상의 보완어로, "Debugging With Arbitrary Record Formats"라는 역어가 그 이후로 [1]제안되었다.

역사

DWARF의 첫 번째 버전은 과도한 양의 스토리지를 사용하는 것으로 입증되었으며 호환되지 않는 후속 버전인 DWARF-2가 이를 대체하고 데이터 크기를 줄이기 위해 다양한 인코딩 방식을 추가했습니다.예를 들어, Sun Microsystems가 Solaris로의 이행의 일환으로 ELF를 채택했을 때, 그들은 stabs-in-elf라고 알려진 임베디드에 stabs-in-elf를 계속 사용하는 것을 선택했다.리눅스도 그 뒤를 따랐고 DWARF-2는 1990년대 후반까지 디폴트가 되지 않았다.

Free Standards Group의 DWARF Workgroup은 2006년 [2]1월에 DWARF 버전 3을 출시하였으며, C++ 네임스페이스, Fortran 90에 대한 지원도 추가하였습니다. 할당 가능한 데이터와 추가 컴파일러 최적화 기술.

DWARF 위원회는 2010년에 [3]"향상된 데이터 압축, 최적화된 코드 설명, C++의 새로운 언어 기능 지원"을 제공하는 DWARF 버전 4를 발표했다.

DWARF 형식의 버전 5는 2017년 [4][5]2월에 발행되었습니다."데이터 압축 개선, 실행 파일에서의 디버깅 데이터 분리, 매크로 및 소스 파일의 설명 개선, 심볼 검색 속도 향상, 최적화된 코드의 디버깅 개선, 기능 및 성능의 수많은 개선 등 많은 부분에서 개선이 이루어졌습니다."

구조.

DWARF는 DE(Debugging Information Entry)라고 불리는 데이터 구조를 사용하여 각 변수, 유형, 프로시저 등을 나타냅니다.DIE에는 태그(예를 들어 DW_TAG_variable, DW_TAG_pointer_type, DW_TAG_subprogram)와 속성(키와 값의 쌍)이 있습니다.DIE는 트리 구조를 형성하는 네스트된(자) DIE를 가질 수 있습니다.DIE 어트리뷰트는 트리 내의 임의의 장소에서 다른 DIE를 참조할 수 있습니다.예를 들어 변수를 나타내는 DIE에는 변수의 유형을 나타내는 DW_AT_type 엔트리가 있습니다.

공간을 절약하기 위해 심볼 디버거에 필요한 2개의 큰 테이블은 심플하고 특별한 목적의 유한 상태 머신을 위한 바이트 코드화된 명령으로 표현됩니다.코드 위치를 소스 코드 위치에 매핑하거나 소스 코드 위치에 매핑하는 라인 번호 테이블은 또한 함수 프롤로그와 에필로그의 일부인 명령도 지정합니다.[ Call Frame Information ]테이블을 사용하면 디버거는 콜스택 상의 프레임을 찾을 수 있습니다.

추가 정보

DWARF 표준 위원회의 의장인 Michael Eager는 디버깅 포맷에 대한 소개와 DWARF 3, DWARF 디버깅 [1]포맷에 대한 소개를 작성했습니다.

레퍼런스

  1. ^ a b c Michael J. Eager (April 2012). "Introduction to the DWARF Debugging Format" (PDF). Retrieved 2015-01-08.
  2. ^ "DWARF Version 3 Standard Released" (Press release). Free Standards Group. January 4, 2006. Retrieved 2007-06-25.
  3. ^ "DWARF Version 4 Released". The DWARF committee. June 16, 2010. Retrieved 2010-06-24.
  4. ^ "DWARF Version 5 Standard Released". The DWARF committee. February 15, 2017. Retrieved 2017-08-07.
  5. ^ "DWARF 5 Standard". The DWARF committee. February 15, 2017. Retrieved 2017-08-07.

외부 링크