【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
相关推荐
KoiC14 分钟前
内网环境部署Deepseek+Dify,构建企业私有化AI应用
linux·人工智能·ubuntu·docker·大模型·ai应用·deepseek
BestRivenCHN26 分钟前
vscode离线配置远程服务器
linux·ide·vscode
100086:)35 分钟前
linux-Vim
linux·编辑器·vim
范哥来了1 小时前
python文本处理pdfminer库安装与使用
linux·开发语言·python
Zfox_1 小时前
【Linux】手动部署并测试内网穿透
linux·运维·服务器·frp·内网穿透
孙同学_2 小时前
【Linux篇】版本控制器-Git
linux·运维·git
写代码的猫眼石2 小时前
并发与IO多路复用(select)(20250306)
linux·服务器·开发语言·网络
zrhsmile2 小时前
麒麟Linux创建开源软件桌面快捷方式和添加到应用列表
linux·运维·开源软件·桌面快捷方式
世味煮成茶.3 小时前
DeepSeek + 沉浸式翻译 打造智能翻译助手
java·大数据·linux·数据库·笔记·ai·软件需求