Debug和Realise版本.docVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Debug和Realise版本

Debug与Release版本的区别 ??? Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动。如果我们愿意,我们完全可以把Debug和 Release的行为完全颠倒过来。当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等。习惯上,我们仍然更愿意使用VC已经定义好的名称。 ??? Debug版本包括调试信息,所以要比Release版本大很多(可能大数百K至数M)。至于是否需要DLL支持,主要看你采用的编译选项。如果是基于 ATL的,则Debug和Release版本对DLL的要求差不多。如果采用的编译选项为使用MFC动态库,则需要MFC42D.DLL等库支持,而 Release版本需要MFC42.DLL支持。Release不对源代码进行调试,不考虑MFC的诊断宏,使用的是 MFC? Release库,编译时对应用程序的速度进行优化,而Debug则正好相反,它允许对源代码进行调试,可以定义和使用MFC的 诊断宏,采用MFC? Debug库,对速度没有优化。??? ??? 既然Debug和 Release仅仅是编译选项的不同,那么为什么要区分Debug和Release版本呢? ??? Debug和Release,在我看来主要是针对其面向的目标不同的而进行区分的。Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发人员提供强大的应用程序调试能力。而Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。 ??? 下面仅就默认的Debug和Release版本的选项进行 比较,详细的编译选项可以看MSDN的说明。 我们将默认的Debug和Release的选项设置进行比较,过滤掉相同设置,主要的不同如下: 编译选项:/Od /D _DEBUG /Gm /RTC1 /MDd /FoDebug““ /ZI 链接选项:/OUT:D:“MyProject“logging“Debug“OptionTest.dll /INCREMENTAL Release设置: 编译选项:/O2 /GL /D NDEBUG /FD /MD /FoRelease““ /Zi 链 接选项:/OUT:D:“MyProject“logging“Release“OptionTest.dll /INCREMENTAL:NO 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? 合并重 复的字符串,并将字符串常量放到只读内存,防止被修改? MDd与MD ??? 首先,Debug版本使用调试版本的运行时库(/MDd选项),Relase版本则使用的是发布版本的运行时库(vcrt.dll)。其区别主要在于运行时的性能影响。调试版本的运行时库包含了调试信息,并采用了一些保护机制以帮助发现错误,也因此,其性能不如发布版本。编译器提供的Runtime Library很稳定,不会造成Release版本错误,倒是由于Debug版本的Runtime Library加强了对错误的检测,如堆内存分配检查等,反而会报告错误,应当指出,如果Debug有错误,而Release版本正常,程序肯定是有 Bug的,只是我们还没有发现。 ZI与Zi ??? 其次,/ZI选项与/Zi选项。通过使用/ZI选项,可以在调试过程修改代码 而不需要重新编译。这是个调试的好帮手,可如果我们使用Release版本,这将变得不可行。 Od与O2 /O2与/Od 选项:Od是关闭编译器优化,普遍用于Debug版本。而O2选项是创建最快速代码,这当然是Release版本的不二选择。 RTCx选 项 /RTCx选项

文档评论(0)

asd522513656 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档