VS中Debug模式和Release模式的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS中Debug模式和Release模式的区别相关的知识,希望对你有一定的参考价值。

vs中的程序有debug和release两个版本,Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发 人员提供强大的应用程序调试能力。而Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信 息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。
debug程序通常比release程序要慢,尤其是处理视频方便release要比debug快很多。在release模式对程序进行调试的时候经常会遇到变量虽然初始化了,但是在查看其值的时候却发现是一个随机的数并不是初始化的值,有时候在对变量进行监视的时候了,会出现找不到变量的情况,原因大致如下:
debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc, 而release的赋值近似于随机。如果你的程序中的某个变量没被初始化就被引用,就很有可能出现异常:用作控制变量将导致流程导向不一致;用作数组下标将会使程序崩溃;更加可能是造成其他变量的不准确而引起其他的错误。所以在声明变量后马上对其初始化一个默认的值是最简单有效的办法,否则项目大了你找都没地方找。代码存在错误在debug方式下可能会忽略而不被察觉到。debug方式下数组越界也大多不会出错,在release中就暴露出来了,这个找起来就比较难了。
只有DEBUG版的程序才能设置断点、单步执行、使用 TRACE/ASSERT等调试输出语句。REALEASE不包含任何调试信息,所以体积小、运行速度快。
参考技术A 这个问题其实很好理解的。
Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
二者最大的区别在于:二者的编译选项不同而已,这里我帮你列举一下二者的编译选项。
Debug 版本:
/MDd /MLd 或 /MTd 使用 Debug runtime library(调试版本的运行时刻函数库)
/Od 关闭优化开关
/D "_DEBUG" 相当于 #define _DEBUG,打开编译调试代码开关(主要针对
assert函数)
/ZI 创建 Edit and continue(编辑继续)数据库,这样在调试过
程中如果修改了源代码不需重新编译
/GZ 可以帮助捕获内存错误
/Gm 打开最小化重链接开关,减少链接时间
Release 版本:
/MD /ML 或 /MT 使用发布版本的运行时刻函数库
/O1 或 /O2 优化开关,使程序最小或最快
/D "NDEBUG" 关闭条件编译调试代码开关(即不编译assert函数)
/GF 合并重复的字符串,并将字符串常量放到只读内存,防止被修改
所以你可以理解Debug 和 Release 并没有本质的界限,他们只是一组编译选项的集合,编译器只是按照预定的选项行动。事实上,我们甚至可以修改这些选项,从而得到优化过的调试版本或是带跟踪语句的发布版本。本回答被提问者采纳

VS系列软件中debug和release编译环境有什么区别


当编译和执行一个工程时,可以在Debug和Release两种配置下执行。

Debug模式用于调试程序,这是个受保护的运行环境,它将告诉你程序是否有泄露,在运行时也能对特定函数的结果进行检查。然而它生成的可执行文件运行较慢。
因此当你的应用经过测试准备投入使用时,你应该在Release模式下进行编译,这将生成供最终用户使用的可执行文件。
简单的说就是Debug下可以进行调试,查bug,改错,且运行较慢。

虽然Release下也可以打断点,但是有时候有些变量的值在Release下是看不见的。调试的话应该用Debug。
注意:经常发生Debug模式下运行正常而Release模式出错的情况,因此要进行更多测试来找到潜在的Bug。
参考《OpenCV计算机视觉编程手册》

转自:https://zhidao.baidu.com/question/360952873348636932.html

以上是关于VS中Debug模式和Release模式的区别的主要内容,如果未能解决你的问题,请参考以下文章

debug和release 模式有啥区别

c语言怎么从debug模式到release模式?

vs2010中release模式下调试程序

gccrelease模式设置断点

.net 项目在Debug模式下打包跟在release模式下打包有啥区别?

iOS 7 上 UIView 的 Debug 和 Release 模式绘制的区别