我必须承认,通常我没有在程序中调试Debug和Release配置之间进行切换,我通常选择调试配置,即使程序实际部署在客户端也是如此.
据我所知,如果不手动更改这些配置,这些配置之间的唯一区别是Debug已DEBUG定义常量,并且Release已检查Optimize代码.
所以我的问题实际上是双重的:
这两种配置之间是否存在很多性能差异.是否有任何特定类型的代码会在这里造成性能上的巨大差异,或者它实际上并不那么重要?
是否有任何类型的代码可以在Debug配置下正常运行,可能在Release配置下失败,或者您可以确定在Debug配置下经过测试和正常工作的代码在Release配置下也能正常工作.
今天我和我的一个朋友进行了讨论,我们就"编译器优化"进行了几个小时的讨论.
我辩护说,有时,编译器优化可能会引入错误或至少是不良行为.
我的朋友完全不同意,他说"编译器是由聪明人构建并做聪明的东西",因此永远不会出错.
他根本没有说服我,但我不得不承认我缺乏现实生活中的例子来强化我的观点.
谁在这?如果是的话,您是否有任何现实生活中的例子,编译器优化会在生成的软件中产生错误?如果我错了,我应该停止编程并学习钓鱼吗?
可能重复:
调试模式中不存在发布版本中的错误的常见原因
有时我会遇到这样一种奇怪的情况,即程序在正常运行时运行不正确,它会弹出终止对话框,但是在调试时正确.当我想使用调试器查找代码中的错误时,这确实让我很沮丧.
你有没有见过这种情况,为什么?
更新:
为了证明有逻辑原因会导致如此令人沮丧的情况:
我认为一个很大的可能性是堆访问volidation.我曾经编写了一个分配一个小缓冲区的函数,但后来我走出了boudary.It将在gdb,cdb等中正确运行(我不知道为什么,但它确实运行正确);但正常运行时异常终止.
我正在使用C++.
我不认为我的问题与上述问题重复.
那个是发布模式和调试模式之间的比较,但我的是在调试和不调试之间,它有一个单词heisenbug,正如许多其他人所指出的那样.
谢谢.