什么是 Linux 本机调试符号格式?

gol*_*lem 7 linux debugging

GCC 文档说该-g选项以操作系统的本机格式(stabs、COFF、XCOFF 或 DWARF 2)生成调试信息

那么,什么是 Linux 原生调试符号格式呢?这叫什么?


更新:我刚刚发现了一个有 15 年历史的gcc 邮件列表讨论,据说当时的原生格式是 stabs,然后他们正在考虑切换到 DWARF2。但那是 15 年前的事了……有更新吗?=)

Ste*_*itt 6

在 Linux 上,默认值现在是 Dwarf 2 和/或 4。要查看这一点,请readelf --debug-dump=info在包含调试符号(或剥离符号)的二进制文件上运行;例如,在 Fedora 上,glibc-debuginfo安装后,运行readelf --debug-dump=info /usr/lib/debug/bin/gencat.debug会给你类似的东西

 <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)
Run Code Online (Sandbox Code Playgroud)

这是一组 Dwarf 2 信息(Version:版本信息参见标题;相同的二进制文件包括 Dwarf 2 和 Dwarf 4 部分)。