打印

Debug 和 Release 编译方式的区别

[复制链接]
1057|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情况下一般不会有任何问题

使用特权

评论回复
5
gygp| | 2017-9-14 22:24 | 只看该作者
release模式下不出错,但debug模式下报错

使用特权

评论回复
6
chenci2013| | 2017-9-14 22:25 | 只看该作者
最基础的编译模式有Debug与Release

使用特权

评论回复
7
biechedan| | 2017-9-14 22:25 | 只看该作者
Debug 为调试版本,Release 为发布版本

使用特权

评论回复
8
wangdezhi| | 2017-9-14 22:26 | 只看该作者
Debug和Release,主要是针对其面向的目标不同的而进行区分的。

使用特权

评论回复
9
isseed| | 2017-9-14 22:26 | 只看该作者
在DEBUG版本下很多调试东西都会加入其内

使用特权

评论回复
10
suzhanhua| | 2017-9-14 22:27 | 只看该作者
Debug中可以单步执行、跟踪等功能

使用特权

评论回复
11
10299823| | 2017-9-14 22:28 | 只看该作者
Debug和Release仅仅是编译选项的不同

使用特权

评论回复
12
51xlf| | 2017-9-14 22:28 | 只看该作者
debug是将每个字节位都赋成0xcc(注1),而release的赋值近似于随机

使用特权

评论回复
13
i1mcu| | 2017-9-14 22:28 | 只看该作者
Debug模式下,比较方便调试

使用特权

评论回复
14
gygp| | 2017-9-14 22:28 | 只看该作者
Debug与Release不同的问题在刚开始编写代码时会经常发生

使用特权

评论回复
15
chenci2013| | 2017-9-14 22:28 | 只看该作者
如果是Release模式,很多不会被编译与执行

使用特权

评论回复
16
biechedan| | 2017-9-14 22:28 | 只看该作者
主要是编译器的选项不同

使用特权

评论回复
17
wangdezhi| | 2017-9-14 22:28 | 只看该作者
elease版出现问题而debug没有该问题

使用特权

评论回复
18
isseed| | 2017-9-14 22:28 | 只看该作者
release编译后效率提高

使用特权

评论回复
19
suzhanhua| | 2017-9-14 22:28 | 只看该作者
Release版运行速度较快

使用特权

评论回复
20
10299823| | 2017-9-14 22:28 | 只看该作者
尽量别去考虑debug和release的内存分配方式

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

640

主题

901

帖子

5

粉丝