哪些特定的优化标志负责优化变量

时间:2016-05-15 09:46:00

标签: c debugging gcc gdb compiler-optimization

我想专门选择优化标志来防止gdb中的<optimized out>变量(参数),而不依赖于-O0

我的背景是调试glibc,它不能用-O0构建,因为它需要某种函数内联。但是我可以看到这一般是有用的,例如在不完全破坏性能的情况下启用有用的调试。

根据gcc -c -Q -O0 --help=optimizers,除了-O1启用的-O0(使用gcc 5.3.1)之外,-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 启用了以下31个优化标记:

Register Certificate

注意:我知道选择性优化/易失性作为手动修复,但我正在寻找更通用的解决方案。

1 个答案:

答案 0 :(得分:1)

不直接回答您的问题,但您可能会追究的是-Og

来自GCC documentation

  

-Og

     

优化调试体验。 -Og启用不会干扰调试的优化。它应该是标准编辑 - 编译 - 调试周期的优化级别,提供合理的优化级别,同时保持快速编译和良好的调试体验。

--help=optimizers上使用-Og并将其与--help=optimizers -O0上的var array = ["ab", "cd", "ef", "ab", "gh"]; function search(search, arr, callback) { for (var i = 0; i < arr.length; i++) { if (search === arr[i]) { callback(arr[i], i, arr); } } return -1; } search('ab', array, function(item, i) { alert(item + " : " + i); }); // or use this Array.prototype.search = function(search, callback) { for (var i = 0; i < this.length; i++) { if (search === this[i]) { callback(this[i], i, this); } } return -1; }; array.search('ab', function(item, i) { alert(item + " : " + i); });进行比较,然后为您提供问题的答案。