Định dạng biểu tượng gỡ lỗi bản địa của Linux là gì?


7

Tài liệu của GCC nói rằng -gtùy chọn này tạo ra thông tin gỡ lỗi ở định dạng gốc của hệ điều hành (stabs, COFF, XCOFF hoặc DWARF 2) .

Vì vậy, định dạng biểu tượng gỡ lỗi bản địa Linux là gì? Đó là những gì được gọi là?


Cập nhật: Tôi vừa tìm thấy một cuộc thảo luận về danh sách gửi thư gcc 15 năm trong đó người ta nói rằng định dạng gốc tại thời điểm đó là đâm và sau đó họ đang xem xét chuyển sang DWARF2. Nhưng đó là 15 năm trước ... Có bản cập nhật nào không? =)


Theo trang DWARF trên wikipedia , "Linux theo sau và DWARF-2 không trở thành mặc định cho đến cuối những năm 1990". . Tôi muốn thấy một nguồn có thẩm quyền hơn mặc dù.
Chấn thương kỹ thuật số

Câu trả lời:


6

Trên Linux, mặc định bây giờ là Dwarf 2 và / hoặc 4. Để thấy điều này, hãy chạy readelf --debug-dump=infotrên tệp nhị phân chứa các ký hiệu gỡ lỗi (hoặc ký hiệu bị tước); ví dụ, trên Fedora, với glibc-debuginfocài đặt, chạy readelf --debug-dump=info /usr/lib/debug/bin/gencat.debugsẽ cung cấp cho bạn một cái gì đó như

 <1><ea>: Abbrev Number: 0
  Compilation Unit @ offset 0xeb:
   Length:        0x5c (32-bit)
   Version:       2
   Abbrev Offset: 0x52
   Pointer Size:  8
 <0><f6>: Abbrev Number: 1 (DW_TAG_compile_unit)
    <f7>   DW_AT_stmt_list   : 0x83
    <fb>   DW_AT_ranges      : 0x0
    <ff>   DW_AT_name        : ../sysdeps/x86_64/crti.S
    <118>   DW_AT_comp_dir    : /usr/src/debug////////glibc-2.21/csu
    <13d>   DW_AT_producer    : GNU AS 2.25
    <149>   DW_AT_language    : 32769   (MIPS assembler)

Đây là một tập hợp thông tin của Người lùn 2 (xem Version:tiêu đề cho thông tin phiên bản; cùng một phần nhị phân bao gồm các phần Người lùn 2 và Người lùn 4).


Bạn có thể giải thích rõ hơn về " cùng một phần nhị phân bao gồm các phần Dwarf 2 Dwarf 4" không? Nếu không, bạn có vẻ đúng, Linux sử dụng DWARF. Ngoài ra, tài liệu mới nhất cho gcc-5.2.0 nói rằng khi bạn sử dụng -gdwarftùy chọn, phiên bản DWARF mặc định là 4. Mặc dù cùng một phần tài liệu cho gcc-4.7.4 (tôi có gcc-4.7.2 ở đây) nói rằng mặc định là DWARF phiên bản 2.
golem

Vì vậy, có vẻ như trên Linux với gcc-4.7.2: gcc -g== gcc -gdwarf==gcc -gdwarf-2
golem

@golem Trên hệ thống Fedora tôi có ở đây, chạy lệnh tôi đã đưa ra danh sách các phần Người lùn với cả hai phiên bản 2 và 4 trong cùng một nhị phân, do đó tôi nhận xét. Nhị phân được xây dựng với gcc 5.1.1; có lẽ việc xây dựng với Dwarf 4 bao gồm các phần phiên bản 2 để tương thích ngược, nhưng đó chỉ là phỏng đoán, tôi phải điều tra thêm.
Stephen Kitt

1
Kể từ gcc 4.8, gcc -gsử dụng Dwarf 4: gcc.gnu.org/gcc-4.8/changes.html
npostavs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.