簡體   English   中英

GCC -g 與 -g3 GDB 標志:有什么區別?

[英]GCC -g vs -g3 GDB Flag: What is the Difference?

使用 gcc 或 Clang 編譯 C 源代碼時,我總是使用-g標志為 gdb 生成調試信息。

gcc -g -o helloworld helloworld.c

我注意到有些人推薦-g3代替。 -g-g3標志之間有什么區別? -g-ggdb之間也有區別嗎?

文檔

-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。

....

級別 3 包括額外信息,例如程序中存在的所有宏定義。 當您使用 -g3 時,某些調試器支持宏擴展。

tl;dr:為了回答您的具體問題, -g3 “包含額外的信息,例如宏定義......當您使用-g3時,某些調試器支持宏擴展”,而-g不包含此額外信息。

更廣泛的答案是 gcc 支持四個級別的調試信息,從-g0 (禁用調試信息)到-g3 (最大調試信息)。

指定-g等效於-g2 奇怪的是, gcc 文檔幾乎沒有說明-g / -g2包含或排除哪些信息:

請求調試信息並使用 level 來指定多少信息。 默認級別為 2。級別 0 根本不產生調試信息。 因此,-g0 否定 -g。

級別 1 產生的信息最少,足以在您不打算調試的程序部分進行回溯。 這包括函數和外部變量的描述以及行號表,但沒有關於局部變量的信息。

級別 3 包括額外信息,例如程序中存在的所有宏定義。 當您使用 -g3 時,某些調試器支持宏擴展。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM