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”选项比较新,报告它的错误(如那些重要的'<优化出来的>')可能有助于改进它。 –