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)中的那些使我意識到選擇性優化/揮發性作爲手動修復,但我正在尋找更通用的解決方案。
這聽起來很像解決方案。不幸的是,還有一些重要的'<優化出來的>'剩餘的(少於'-O1')。我想知道爲什麼這個選項不是更受歡迎,普遍的答案是「-O0」。 – Zulan
@Zulan:如果我是你,我現在可以找出'Og'和'O1'的標誌區別(使用'--help = optimizers'),然後閱讀這些標誌(請參閱我的答案中的鏈接),並簡單地嘗試一個,直到我得到你所需要的。最後,您可能還想提出這項工作的結果,以回答您自己的問題。 :-) – alk
像'-Og'這樣的全局標誌不僅僅是單個優化標誌的總和,所以'--help = optimizers'不能給出完整的答案。 「-Og」選項比較新,報告它的錯誤(如那些重要的'<優化出來的>')可能有助於改進它。 –