[英]gcc -g0 and without the -g option
沒有-g
選項進行編譯和-g0
gcc中的-g0
選項進行編譯有什么區別? 在gcc中給出-g0
選項背后有什么具體原因嗎? 我嘗試編譯並在GDB中找到兩個案例的“ 無調試符號 ”消息。
如果你去GCC 手冊 ,你會發現它說:
-g
level
......請求調試信息並使用級別來指定多少信息。 默認級別為2。
級別0根本不產生調試信息。 因此,
-g0
否定-g
。
因此,如果需要調試信息,請不要使用-g0
。 如果確實需要調試信息,請記住在創建目標文件( -c
)和鏈接程序時都使用-g
選項。
並且在沒有-g
進行編譯並使用-g0
進行編譯是等效的,並且在生成的二進制文件中沒有調試信息 - 正如您通過實驗發現的那樣。
從手冊 :
-glevel
-ggdblevel
-gstabslevel
-gcofflevel
-gxcofflevel
-gvmslevel
請求調試信息並使用級別來指定多少信息。 默認級別為2。
級別0根本不產生調試信息。 因此,
-g0
否定-g
。級別1產生的信息最少,足以在程序中不打算調試的部分進行回溯。 這包括函數和外部變量的描述,但沒有關於局部變量和行號的信息。
級別3包括額外信息,例如程序中存在的所有宏定義。 使用
-g3
時,某些調試器支持宏擴展。
-gdwarf-2
不接受連接的調試級別,因為GCC用於支持選項-gdwarf
,該選項意味着在DWARF格式的版本1中生成調試信息(這與版本2非常不同),並且它本來也是如此混亂。 該調試格式已經過時,但現在無法更改該選項。 而是使用額外的-glevel
選項來更改DWARF的調試級別。
為了完整-g2
,關於默認級別-g
/ -g2
-g
以操作系統的本機格式(stabs,COFF,XCOFF或DWARF 2)生成調試信息。 GDB可以使用此調試信息。
在大多數使用stabs格式的系統上,
-g
允許使用只有GDB才能使用的額外調試信息; 這些額外的信息使調試在GDB中更好地工作,但可能使其他調試器崩潰或拒絕讀取程序。 如果要確定是否生成額外信息,請使用-gstabs+
, --gstabs
,-gxcoff+
, --gxcoff
或-gvms
(參見下文)。GCC允許您使用
-g
和-O
。 優化代碼所采用的快捷方式有時會產生令人驚訝的結果:您聲明的某些變量可能根本不存在; 控制流可能會短暫地移動到你沒想到的地方; 某些語句可能無法執行,因為它們計算的結果不變或者它們的值已經存在; 一些語句可能在不同的地方執行,因為它們已被移出循環。然而,它證明可以調試優化的輸出。 這使得將優化程序用於可能存在錯誤的程序是合理的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.