匯東網


VS 之 debug 模式可以正常运行而 release 模式运行失败的解决方案,如何关闭 release 优化

[編輯] [转简体]
|
作者:huidong | 分類:【編程】Visual Studio
[ 27 瀏覽 0 評論 7 贊 7 踩 ]

概要

正文

写项目,debug下调试通过,换成 release 编译运行,结果出现预料之外的错误。

多次测试确定了debug下确实没有问题,因为 release 编译而出现问题。


单步了一遍代码,发现这很可能是因为 release 模式优化掉了部分变量导致的问题。


注意:出现此情况有很大可能性是你的代码有问题,在debug模式下运行时的某些特性掩盖住了你的bug,在release中体现了出来(比如说局部变量要记得初始化啥的),所以此时要仔细调试找到问题根源。如果发现调试时某个变量或者函数被优化掉了,导致不可见,可以先按以下步骤关闭release的优化再进行调试。


如果实在调试不出来,直接按下面步骤关闭优化看看能不能运行。


解决方案:

关闭release的优化选项,在 【项目属性】 中选择到Release模式,进入【C/C++】的【优化】页,将【优化】的选项从【[/O2](优化速度)】改为【[/Od](已禁用)】。


再次运行程序,发现问题解决。


但是还有一个问题:我发现这样下来,release生成的程序运行得还没有debug模式的快,咋整?对比了debug模式下【优化】页面的选项,我发现debug模式下关闭了所有优化选项,而release模式默认开启了 [O2]、[启用内部函数] 和 [全程序优化]。


现在O2优化已经关闭,于是我尝试把全程序优化也关闭,但是再次运行还是很慢,所以我打开了全程序优化,关闭了 [启用内部函数],再次运行发现明显快了一些,但是更明显的是,debug模式下的速度还是比release的快。


但是其实问题出在:如果在VS里按Ctrl+F5运行程序,程序要加载一些东西,然后才进入main函数,这样导致的程序运行缓慢。我在main函数的开头加上了printf语句,如果在VS中运行release,会等一会才输出printf,这就说明是程序在加载别的东西。这时手动到程序目录去运行release程序,就可以发现速度没有比debug的慢。


其实还可以把【优化】页面的选项【优化大小或速度】设置为 [代码速度优先(Ot)] ,再次运行程序,如果程序不会出问题的话,可以保留这个设置,有可能可以提点速吧。


总结:

  1. debug没有问题,release下出现问题,需要打开【项目属性】,选为release模式,进入【C/C++】的【优化】页面,把【优化】的[O2]关闭,也就是设置为 [已禁用 (/Od)]

  2. 如果关闭O2优化后速度太慢,可以尝试把【项目属性】 中 【C/C++】的【优化】页面的【启用内部函数】也关闭,把【优化大小或速度】设置为 [代码速度优先(Ot)](如果[Ot]的开启导致程序还是不能正常运行,那[Ot]也别开了)

  3. 如果使用VS运行release程序的速度快了一点,但比debug模式要慢,可以尝试不使用VS运行程序,直接到目录运行程序,看看是不是快了很多,如果快了很多那就没问题了。


[ 7] [ 7]


 評論區  0 條評論

+ 添加評論