记一次有趣的debug,VS编译器上Debug和Realease的差异

        之前自己写过一个imageread的函数,用了好久一直没问题。最近两天,同事让我realease一个项目给他,其中就包含了我自己写的imageread函数。

        我的函数就长这样,不包含公司的code,不算泄密哈。

记一次有趣的debug,VS编译器上Debug和Realease的差异_第1张图片

        在realse之前,我在debug模式下测试的半天,没问题。然后,就是接下来的。。。不断报错,提示“Image read fail!”。

记一次有趣的debug,VS编译器上Debug和Realease的差异_第2张图片

        然后我就觉得莫名其妙,debug模式和realease模式的所有配置都一样,命令行也一样,反正就是各种配置都一样,为啥debug能跑通,realease模式就是中途跳出?


        话说,昨天搞这个bug的时候,搞了半天也搞不好。然后,又快下班了,就把我领导叫来了,让他帮忙看看。

        先是他在座位上听了我描述的现象觉得,可能是内存的问题,有可能哪里没有初始化,或者是哪个地方的内存没有释放,等等。然后,我觉得不应该,他就从座位上起来,到我位置上帮我debug,老将出马。。。不出三分钟,搞定!

        原来是我的这个bool型的imageread函数,在其中的某一个分支没有给返回值,结果这次跑的时候正好就走的这个分支。

        我这个函数之前的逻辑是:如果运行到函数内部的某处,读图出现问题就马上return false并打印错误信息。如果是读图成功的话,就不考虑返回值了,忘记return true了。

记一次有趣的debug,VS编译器上Debug和Realease的差异_第3张图片

记一次有趣的debug,VS编译器上Debug和Realease的差异_第4张图片

        在那个分支加上return true的返回值后,realease模式就正常了,得到了和debug模式相同的结果。(不再出现“Image read fail!”了) 

        后来,听我领导说,可能是因为你这个地方没写返回值,然后程序运行到这里以后就会返回一个系统默认值。可能这个默认值,在debug模式下是true,这样也正好符合逻辑,程序正常进行。而在release模式下,这个默认值为false,也就是说,图像明明读成功了却返回了false,最终导致程序跳出,并返回错误信息,读图失败。

  

版权声明:文中的部分图片,文字或者其他素材,可能来自很多不同的网站和说明,在此没法一一列出,如有侵权,请告知,立即删除。欢迎大家转载,但是,如果有人引用或者COPY我的文章,必须在你的文章中注明你所使用的图片或者文字来自于我的文章,否则,侵权必究。 ----松下J27 

你可能感兴趣的:(coding,visualstudio,vs编译器,C语言,c++,debug,程序debug)