【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
相关推荐
lllsure6 小时前
Linux 实用指令
linux·物联网
努力的小T7 小时前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
Nerd Nirvana7 小时前
OpenSSL crt & key (生成一套用于TLS双向认证的证书密钥)
linux·ssl·shell·认证·加密·tls·oepnssl
letisgo58 小时前
记录一次部署PC端网址全过程
linux·阿里云·服务器运维
猫猫的小茶馆8 小时前
【网络编程】UDP协议
linux·服务器·网络·网络协议·ubuntu·udp
尚墨11118 小时前
linux 安装启动zookeeper全过程及遇到的坑
linux·zookeeper
鱼嘻8 小时前
Linux自学day23-进程和线程
linux·服务器·c语言·进程和线程
AuGuSt_818 小时前
在windows下安装windows+Ubuntu16.04双系统(下)
linux·ubuntu·双系统
old_power9 小时前
Linux(Ubuntu24.04)源码编译安装OpenCV4.6.0
linux·opencv
爆更小小刘9 小时前
Linux下基本指令(4)
linux·运维·服务器