Debug 和 Release 编译方式的区别

[复制链接]
1512|19
 楼主| Peonys 发表于 2017-9-14 10:55 | 显示全部楼层 |阅读模式
Debug 和 Release 编译方式的区别

本文主要包含如下内容:
1. Debug 和 Release 编译方式的本质区别
2. 哪些情况下 Release 版会出错
3. 怎样“调试” Release 版的程序
--------------------------------------
            关于Debug和Release之本质区别的讨论

一、Debug 和 Release 编译方式的本质区别

    Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
    Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 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 并没有本质的界限,他们只是一组编译选项的集合,编译器只是按照预定的选项行动。事实上,我们甚至可以修改这些选项,从而得到优化过的调试版本或是带跟踪语句的发布版本。

zhangmangui 发表于 2017-9-14 22:23 | 显示全部楼层
我有详细的分享   关于他们的区别
51xlf 发表于 2017-9-14 22:23 | 显示全部楼层
debug跟release在初始化变量时所做的操作是不同的
i1mcu 发表于 2017-9-14 22:24 | 显示全部楼层
Debug情况下一般不会有任何问题
gygp 发表于 2017-9-14 22:24 | 显示全部楼层
release模式下不出错,但debug模式下报错
chenci2013 发表于 2017-9-14 22:25 | 显示全部楼层
最基础的编译模式有Debug与Release
biechedan 发表于 2017-9-14 22:25 | 显示全部楼层
Debug 为调试版本,Release 为发布版本
wangdezhi 发表于 2017-9-14 22:26 | 显示全部楼层
Debug和Release,主要是针对其面向的目标不同的而进行区分的。
isseed 发表于 2017-9-14 22:26 | 显示全部楼层
在DEBUG版本下很多调试东西都会加入其内
suzhanhua 发表于 2017-9-14 22:27 | 显示全部楼层
Debug中可以单步执行、跟踪等功能
10299823 发表于 2017-9-14 22:28 | 显示全部楼层
Debug和Release仅仅是编译选项的不同
51xlf 发表于 2017-9-14 22:28 | 显示全部楼层
debug是将每个字节位都赋成0xcc(注1),而release的赋值近似于随机
i1mcu 发表于 2017-9-14 22:28 | 显示全部楼层
Debug模式下,比较方便调试
gygp 发表于 2017-9-14 22:28 | 显示全部楼层
Debug与Release不同的问题在刚开始编写代码时会经常发生
chenci2013 发表于 2017-9-14 22:28 | 显示全部楼层
如果是Release模式,很多不会被编译与执行
biechedan 发表于 2017-9-14 22:28 | 显示全部楼层
主要是编译器的选项不同
wangdezhi 发表于 2017-9-14 22:28 | 显示全部楼层
elease版出现问题而debug没有该问题
isseed 发表于 2017-9-14 22:28 | 显示全部楼层
release编译后效率提高
suzhanhua 发表于 2017-9-14 22:28 | 显示全部楼层
Release版运行速度较快
10299823 发表于 2017-9-14 22:28 | 显示全部楼层
尽量别去考虑debug和release的内存分配方式
您需要登录后才可以回帖 登录 | 注册

本版积分规则

640

主题

901

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部