GCC 文档说该-g
选项以操作系统的本机格式(stabs、COFF、XCOFF 或 DWARF 2)生成调试信息。
那么,什么是 Linux 原生调试符号格式呢?这叫什么?
更新:我刚刚发现了一个有 15 年历史的gcc 邮件列表讨论,据说当时的原生格式是 stabs,然后他们正在考虑切换到 DWARF2。但那是 15 年前的事了……有更新吗?=)
在 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 部分)。