首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >-g与-g3 GDB旗帜:有什么区别?

-g与-g3 GDB旗帜:有什么区别?
EN

Stack Overflow用户
提问于 2012-05-07 07:08:19
回答 2查看 68.4K关注 0票数 125

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

gcc -g -o helloworld helloworld.c

我注意到有些人推荐-g3-g标志和-g3标志有什么区别?另外,-g-ggdb之间有区别吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-07 07:13:42

docs

-g

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

..。

-ggdb

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

-gvmslevel

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

……

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

票数 120
EN

Stack Overflow用户

发布于 2016-03-26 02:29:49

tl;dr:要回答您的特定问题,-g3“包括额外的信息,如宏定义...当您使用-g3时,某些调试器支持宏扩展”,而-g不包括这些额外的信息。

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

指定-g等效于-g2。奇怪的是,gcc docs很少提及-g/-g2包含或排除了哪些信息:

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

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

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

票数 39
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10475040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档