优化编译器消除bug



所以很多人在堆栈溢出上发表了关于编译器优化如何将bug引入程序的文章。然而,我遇到了相反的问题。我正在写一个c++程序,我有一个bug,似乎是未定义的行为,只有当我设置XCode的编译器关闭时才会出现(None[- 0])。如果我将其设置为"最快,最积极的优化[-Ofast]",那么漏洞就会消失。

所以我想知道是否有人有任何优化摆脱bug的经验(而不是更常见的优化引入bug的情况)。常见的原因是什么?我有点不知道该做什么或者在哪里检查

优化可以改变表达式的求值顺序,因此,如果您的bug是结果,例如,在

中指定了foo()bar()的求值顺序:
 some_function(foo(), bar());

则不同的优化设置将暴露错误,而其他的将隐藏它。

启用优化可以使释放的堆栈/堆内存在比调试构建更长的时间内包含有效数据。一些编译器甚至在调试构建中清除释放的堆栈/堆内存,这意味着释放的数据立即无效。

最新更新