海湾合作委员会文档说这个-g
选项以操作系统的本机格式(stabs、COFF、XCOFF 或 DWARF 2)生成调试信息。
那么,Linux本机调试符号格式是什么?这叫什么?
更新:我刚刚找到了一个 15 岁的人gcc 邮件列表讨论据说当时的原生格式是stabs,然后他们正在考虑切换到DWARF2。但那是 15 年前的事了……有更新吗? =)
答案1
在 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)
这是一组 Dwarf 2 信息(请参阅Version:
标题以获取版本信息;相同的二进制文件包括 Dwarf 2 和 Dwarf 4 部分)。