簡體   English   中英

gcc -g0並且沒有-g選項

[英]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.

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