2016-05-15 98 views
1

我想專門選擇優化標誌來防止gdb中的<optimized out>變量(參數),而不訴諸於-O0哪個特定優化標誌負責優化輸出變量

我的背景是調試glibc,它不能用-O0構建,因爲它需要某種函數內聯。不過,我可以看到這在一般情況下是有用的,例如以啓用有用的調試而不會完全破壞性能。

-fbranch-count-reg 
-fcombine-stack-adjustments 
-fcompare-elim 
-fcprop-registers 
-fdefer-pop 
-fforward-propagate 
-fguess-branch-probability 
-fif-conversion 
-fif-conversion2 
-finline-functions-called-once 
-fipa-profile 
-fipa-pure-const 
-fipa-reference 
-fmove-loop-invariants 
-fshrink-wrap 
-fsplit-wide-types 
-fssa-phiopt 
-ftree-bit-ccp 
-ftree-ccp 
-ftree-ch 
-ftree-copy-prop 
-ftree-copyrename 
-ftree-dce 
-ftree-dominator-opts 
-ftree-dse 
-ftree-fre 
-ftree-pta 
-ftree-sink 
-ftree-slsr 
-ftree-sra 
-ftree-ter 

注:

gcc -c -Q -O0 --help=optimizers,下列31個優化標誌由-O1除了在-O0啓用(用gcc 5.3.1)中的那些使我意識到選擇性優化/揮發性作爲手動修復,但我正在尋找更通用的解決方案。

回答

1

不能直接回答你的問題,但你是什麼可能後-Og

GCC documentation

-Og

優化調試經驗。 -Og啓用不會影響調試的優化。它應該是標準編輯 - 編譯 - 調試周期的優化級別選擇,提供合理的優化級別,同時保持快速編譯和良好的調試體驗。

-Og使用--help=optimizers,並與你什麼--help=optimizers-O0比較,然後給你回答你的問題。

+0

這聽起來很像解決方案。不幸的是,還有一些重要的'<優化出來的>'剩餘的(少於'-O1')。我想知道爲什麼這個選項不是更受歡迎,普遍的答案是「-O0」。 – Zulan

+0

@Zulan:如果我是你,我現在可以找出'Og'和'O1'的標誌區別(使用'--help = optimizers'),然後閱讀這些標誌(請參閱我的答案中的鏈接),並簡單地嘗試一個,直到我得到你所需要的。最後,您可能還想提出這項工作的結果,以回答您自己的問題。 :-) – alk

+1

像'-Og'這樣的全局標誌不僅僅是單個優化標誌的總和,所以'--help = optimizers'不能給出完整的答案。 「-Og」選項比較新,報告它的錯誤(如那些重要的'<優化出來的>')可能有助於改進它。 –