KRASNOLUD - DWARF

DWARF to szeroko stosowany, ustandaryzowany format danych do debugowania . DWARF został pierwotnie zaprojektowany wraz z formatem wykonywalnym i łączonym (ELF), chociaż jest niezależny od formatów plików obiektowych . Nazwa jest średniowiecznym dodatkiem fantasy do "ELF", które nie miało oficjalnego znaczenia, chociaż od tamtej pory zaproponowano backronim "Debugowanie z dowolnymi formatami rekordów".

Historia

Pierwsza wersja DWARF okazała się używać nadmiernej ilości pamięci, a niekompatybilny następca DWARF-2 zastąpił go i dodał różne schematy kodowania, aby zmniejszyć rozmiar danych. DWARF nie od razu zyskał powszechną akceptację; na przykład, kiedy Sun Microsystems zaadoptował ELF jako część ich przejścia na Solaris , zdecydował się kontynuować używanie pchnięć , w osadzeniu znanym jako „dźgnięcie w elfa”. Linux poszedł w jego ślady, a DWARF-2 nie stał się domyślnym aż do późnych lat 90-tych.

DWARF Workgroup z Free Standards Group wydała wersję 3 DWARF w styczniu 2006, dodając (między innymi) obsługę przestrzeni nazw C ++ , przydzielanych danych Fortran 90 i dodatkowe techniki optymalizacji kompilatora .

Komitet DWARF opublikował wersję 4 DWARF, która oferuje „ulepszoną kompresję danych, lepszy opis zoptymalizowanego kodu i obsługę nowych funkcji językowych w C ++” w 2010 roku.

Wersja 5 formatu DWARF została opublikowana w lutym 2017 r. „Zawiera ulepszenia w wielu obszarach: lepsza kompresja danych, separacja danych debugowania od plików wykonywalnych, ulepszony opis makr i plików źródłowych, szybsze wyszukiwanie symboli, ulepszone debugowanie zoptymalizowanego kodu , a także liczne ulepszenia w zakresie funkcjonalności i wydajności ”.

Struktura

DWARF wykorzystuje strukturę danych zwaną Debugging Information Entry (DIE) do reprezentowania każdej zmiennej, typu, procedury itp. DIE ma tag (np. DW_TAG_variable , DW_TAG_pointer_type , DW_TAG_subprogram ) i atrybuty (pary klucz-wartość). DIE może mieć zagnieżdżone (potomne) DIE, tworzące strukturę drzewiastą . Atrybut DIE może odnosić się do innej DIE w dowolnym miejscu w drzewie - na przykład DIE reprezentująca zmienną miałaby wpis DW_AT_type wskazujący na DIE opisujący typ zmiennej.

Aby zaoszczędzić miejsce, dwie duże tabele wymagane przez symboliczne debuggery są reprezentowane jako zakodowane bajtowo instrukcje dla prostych maszyn skończonych specjalnego przeznaczenia . Tabela numerów linii, która odwzorowuje lokalizacje kodu na lokalizacje kodu źródłowego i odwrotnie, określa również, które instrukcje są częścią prologów funkcji i epilogów. Tabela informacji o ramkach wywołań umożliwia debugerom lokalizowanie ramek na stosie wywołań .

Dalsza lektura

Michael Eager, przewodniczący Komitetu ds. Standardów DWARF, napisał wprowadzenie do formatów debugowania i DWARF 3, Wprowadzenie do formatu debugowania DWARF .

Bibliografia

Linki zewnętrzne