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