gcc:“-g”和“-ggdb”有什么区别?

gcc: what's the difference between "-g" and "-ggdb"?

我在linux下工作,在我看来“-g”和“-ggdb”的效果差别不大。我只发现使用“-ggdb”会生成更大几个字节的二进制文件。

那么 gdb 应该有一个“-g”选项和另一个“-ggdb”选项的核心区别是什么?

谢谢。

我推荐你阅读这篇文章documentation, and this topic

编译后的程序应该存储在某个地方,以便调试器(此处为 GDB)查看并跟踪。

这在技术上称为 "Debugging data format"

一些普遍接受的调试数据格式是(还有一些):

COFF - 通用对象文件格式 - 在类似 UNIX 的系统上。

PE/COFF - 可移植的可执行文件 - 在 windows 上非常有名,通常 dotnet 使用它。

DWARF - 在类 UNIX 系统上流行。

等..

您在问题中提出的 GDB 选项与生成这些调试数据格式有关。

根据文档,功能上的区别是: 选项 "g" 以特定系统的本机格式提供调试数据。 选项“-ggdb”有点丰富和昂贵。以可用的最具表现力的格式提供调试数据。