【GNU】gcc -g编译选项 -g0 -g1 -g2 -g3 -gdwarf

1、gcc -g的作用

GCC 的 -g 选项用于在编译时生成调试信息,这些信息会嵌入到生成的目标文件或可执行文件中,主要目的是为了支持调试器(如 gdb)对程序的调试工作。

1.1 生成调试信息

当你在编译代码时使用 -g 选项,GCC 会将额外的调试信息嵌入到生成的可执行文件或目标文件中。这些调试信息包括:

  • 变量的名字和类型。
  • 源代码中对应的行号。
  • 函数调用栈的信息。

调试信息存储在符号表中,不会影响程序的实际执行逻辑。

1.2 支持调试器工作

生成的调试信息可以被调试器(例如 gdb)使用,这样就可以逐步调试程序的运行:

  • 设置断点。
  • 单步执行程序。
  • 查看变量的值和内存地址。
  • 跟踪程序的调用栈等。

1.3 不优化代码

使用 -g 选项时,GCC 不会对程序进行优化,确保调试时的代码行为和源代码的逻辑一致。

如果需要同时优化代码并生成调试信息,可以结合使用 -O 选项(例如 -g -O2),但这样可能会导致调试器显示的代码和实际执行的代码不完全对应(因为优化可能改变代码的结构)。关于优化选项,可见这篇文章:

【gcc】gcc -O编译选项 -Og -O0 -O1 -O2 -O3 -Os-CSDN博客

2、gcc -g -g0 -g1 -g2 -g3

选项 描述
-g 生成默认格式的调试信息,具体格式由目标系统(目标平台)决定,通常为 DWARF。
-g0 不生成调试信息,相当于关闭调试功能。
-g1 生成最少的调试信息,仅包含基本的行号和文件信息。
-g2 默认选项,生成完整的调试信息,包括变量和行号等(推荐用于大多数调试场景)。
-g3 生成最详细的调试信息,包括宏定义的调试信息,适合需要深入调试的场景。

3、gcc -gdwarf

-gdwarf 是 GCC 提供的选项,用于指定生成的调试信息的格式为 DWARF(Debugging With Attributed Record Formats)。DWARF 是一种广泛使用的调试信息标准,它与编程语言无关,可以用来描述程序的源代码结构、变量、类型和控制流等信息。

当使用 -g 时,GCC 默认会根据目标平台生成调试信息

  • Linux 系统通常默认使用 DWARF 格式。
  • Windows 系统可能会使用其他调试格式(如 CodeView)。
  • 使用 -gdwarf 强制 GCC 使用 DWARF 格式。

DWARF 有多个版本(如 DWARF 2、DWARF 3、DWARF 4 和 DWARF 5),每个版本在功能和表现上略有不同。通过指定 -gdwarf-N,可以选择特定的 DWARF 版本:

  • -gdwarf-2
  • -gdwarf-3
  • -gdwarf-4
  • -gdwarf-5
相关推荐
CAFEBABE 343 小时前
linux离线安装docker并启动
linux·docker·eureka
OnlyEasyCode4 小时前
快速上手!查看、拷贝、编辑、远程连接Linux命令
linux·运维·服务器
dualven_in_csdn4 小时前
UDP广播接收小优化
linux·运维·服务器
Xの哲學5 小时前
Linux二层转发: 从数据包到网络之桥的深度解剖
linux·服务器·算法·架构·边缘计算
石像鬼₧魂石5 小时前
Termux ↔ Windows 靶机 反向连接实操命令清单
linux·windows·学习
啃火龙果的兔子6 小时前
如何将D:\BaiduNetdiskDownload所有目录下的所有图片复制提取到D:\bacPic
linux·运维·服务器
FF-Studio6 小时前
RTX 5060 Ti Linux 驱动黑屏避坑指南:CUDA 13.1, Open Kernel 与 BIOS 设置
linux·运维·服务器·cuda
坐吃山猪6 小时前
BrowserUse14-源码-ScreenShot模块-整理
linux·数据库·python
Jelly-小丑鱼6 小时前
Linux搭建syslog日志服务器
linux·服务器·docker·日志服务器·syslog服务器
yilan_n6 小时前
在Linux下使用Termony搭建HNP自验证环境全指南
linux·harmonyos·termony·hnp·命令行适配