Debug版本正常运行,Release版本编译通过但运行崩溃

时间:2022-04-08 16:54:32

解决这个问题之前,第一个想的是Debug版本和Release版本有什么区别

Debug版:

经过编译器编译出的项目.exe文件大,而且生成的二进制命令没有经过编译器的优化。项目中包含着丰富的调试信息,供programer调试程序。这就是为什么,当我们在Debug程序的时候,为什么程序就会在我们设置断点的地方自动停下,而且仿佛时间静止,还可以显示此时相关变量的状态。

Release版:
这个版本是的出发点是用户,所以不保存调试信息,编译器在编译的时候进行了各种优化(变量不会默认赋值之类的),进而达到,代码文件最小,执行速度最优。

实际上,Debug 和 Release 并没有本质的界限,并不是非黑即白的。他们只是一组编译选项的集合,编译器只是按照预定的选项行动。事实上,我们甚至可以修改这些选项,从而得到优化过的Debug版,或是带有调试信息的Release版。

这样先通过崩溃信息,检查代码,看看是不是有地方引用了不能引用的值之类的代码问题,比如debug方式下数组越界也大多不会出错,在release中就暴露出来了。

然后检查debug和release的配置属性有什么不同,有时候有些很奇怪的问题就是由于在release的属性配置中链接器——输入——附加依赖项中添加了调试版本的.lib,仔细检查这些方面的问题。

实在看不出的话,就让代码回退到之前的可以正常运行的版本,对比他们的差异,再一步步排除得到结果。

tip:在debug改动的配置属性不会同步到release上,要在release上重新配置,这个时候注意添加附加依赖项的时候要使用release版本的库