我想专门选择优化标志来防止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
注意:我知道选择性优化/易失性作为手动修复,但我正在寻找更通用的解决方案。
答案 0 :(得分:1)
不直接回答您的问题,但您可能会追究的是-Og
:
-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);
});
进行比较,然后为您提供问题的答案。