当前位置: 首页 > 知识库问答 >
问题:

GCC-g vs-g3 GDB标志:有什么区别?

陆畅
2023-03-14

当使用gcc或Clang编译C源代码时,我总是使用-g标志来生成gdb的调试信息。

gcc-g-o helloworld. c

我注意到有些人推荐使用-g3-g-g3标志之间有什么区别?-g-ggdb之间也有区别吗?

共有2个答案

龙飞
2023-03-14

tl; dr:为了回答您的具体问题,-g3"包含了额外的信息,例如宏定义......当您使用-g3"时,有些调试器支持宏扩展,而-g不包含这些额外的信息。

更广泛的答案是,gcc支持四个级别的调试信息,从g0(禁用调试信息)到g3(最大调试信息)。

指定-g相当于-g2。奇怪的是,gcc文档很少提到-g/-g2包含或排除的信息:

请求调试信息,并使用级别指定多少信息。默认级别为2。级别0根本不产生调试信息。因此,-g0否定-g。

级别1产生的信息很少,足以在不打算调试的程序部分进行回溯。这包括函数和外部变量的描述,以及行号表,但没有关于局部变量的信息。

级别3包括额外信息,例如程序中存在的所有宏定义。有些调试器在使用-g3时支持宏扩展。

支才
2023-03-14

来自文档:

-g

以操作系统的本机格式(stabs、COFF、XCOFF或DWARF 2)生成调试信息。GDB可以使用这些调试信息。在大多数使用stabs格式的系统上,-g允许使用只有GDB才能使用的额外调试信息;这些额外的信息使GDB中的调试工作更好,但可能会导致其他调试器崩溃或拒绝读取程序。如果要确定是否生成额外信息,请使用-gstabs、-gstabs、-gxcoff、-gxcoff或-gvms(见下文)。

......

-ggdb

生成调试信息供GDB使用。这意味着尽可能使用最具表现力的格式(DWARF 2、STAB或原生格式,如果两者都不受支持),包括GDB扩展。

-gvmslevel

请求调试信息,并使用级别指定多少信息。默认级别为2。级别0根本不产生调试信息。因此,-g0否定-g。

....

级别3包括额外信息,例如程序中存在的所有宏定义。有些调试器在使用-g3时支持宏扩展。

 类似资料:
  • 发展至今(2020 年 6 月份),GCC 编译器已经更新至 10.1.0 版本,其功能也由最初仅能编译 C 语言,扩增至可以编译多种编程语言,其中就包括 C++ 。 除此之外,当下的 GCC 编译器还支持编译 Go、Objective-C,Objective-C ++,Fortran,Ada,D 和 BRIG(HSAIL)等程序,甚至于 GCC 6 以及之前的版本还支持编译 Java 程序。但本

  • 当我编译我的项目并检查运行所使用的资源时,大CPU/内存猪有时被称为,有时被称为。两者之间有什么区别,我是否应该直接调用?

  • 这听起来很基本,但我在很多论坛上都能看到 ####################################################################################################################### 加号和减号之间有什么区别,或者只是在标志前没有符号? 这些标志是做什么的?

  • 我一直在将s写入,而不关注flags字段,这是方法签名中的一个参数,它工作得很好,但我遇到了一个无法再忽略它们的实现: 这是我编写的一个到实用程序/从到/从实用程序,我想知道在编写它们时,是否应该将标志按原样传递给Key和Value,或者应该为Key传递0,而为Value传递。 我在文档中读到了什么是标志的定义: PARCELABLE_WRITE_RETURN_VALUE 在API级别1中添加 与

  • 对于 GCC 的认知,很多读者还仅停留在“GCC 是一个C语言编译器”的层面,是很片面的。从本节开始,我将带领大家系统学习 GCC,本节先带领大家系统地了解一下 GCC。 谈到 GCC,就不得不提 GNU 计划。GNU 全称 GNU's Not UNIX,又被称为“革奴计划”,由理查德·斯托曼于 1983 年发起。GNU 计划的最终目标是打造出一套完全自由(即自由使用、自由更改、自由发布)、开源的

  • 本文向大家介绍pre与xmp标签有什么区别?相关面试题,主要包含被问及pre与xmp标签有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 xmp的标签,会复把抱在内部的html片段当作字符串输出(此标签已废弃) 标签,可以在保留原来文本格式的基础制上让文本在页面上显示出来 xmp //输出 pre //输出 加粗的pre