【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
相关推荐
Johny_Zhao43 分钟前
Burp Suite 企业级深度实战教程
linux·网络·网络安全·信息安全·云计算·shell·burp suite·系统运维·itsm
良辰美景好时光1 小时前
keepalived定制日志bug
linux·运维·bug
s_little_monster1 小时前
【Linux】网络--网络层--IP协议
linux·运维·网络·经验分享·笔记·学习·tcp/ip
forward_huan1 小时前
wsl安装linux
linux·wsl
西阳未落2 小时前
Linux(10)——第二个小程序(自制shell)
linux·运维·服务器
chiou7222 小时前
为 Ubuntu 安装的软件创建桌面图标
linux·ubuntu·lua
binary思维2 小时前
Ubuntu挂起和休眠
linux·运维·ubuntu
初叶 crmeb3 小时前
JAVA单商户易联云小票打印替换模板
java·linux·python
qq_447429413 小时前
数据结构与算法:图论——拓扑排序
linux·c语言·学习·图论
緈福的街口3 小时前
【leetcode】459.重复的子字符串
linux·算法·leetcode