所以很多人在堆栈溢出上发表了关于编译器优化如何将bug引入程序的文章。然而,我遇到了相反的问题。我正在写一个c++程序,我有一个bug,似乎是未定义的行为,只有当我设置XCode的编译器关闭时才会出现(None[- 0])。如果我将其设置为"最快,最积极的优化[-Ofast]",那么漏洞就会消失。
所以我想知道是否有人有任何优化摆脱bug的经验(而不是更常见的优化引入bug的情况)。常见的原因是什么?我有点不知道该做什么或者在哪里检查
优化可以改变表达式的求值顺序,因此,如果您的bug是结果,例如,在
中指定了foo()
和bar()
的求值顺序: some_function(foo(), bar());
则不同的优化设置将暴露错误,而其他的将隐藏它。
启用优化可以使释放的堆栈/堆内存在比调试构建更长的时间内包含有效数据。一些编译器甚至在调试构建中清除释放的堆栈/堆内存,这意味着释放的数据立即无效。