ebug和Release区别.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  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文档。上传文档
查看更多
IAR的Workspace顶部下拉菜单中Debug和Release区别?Hanson-he? 在IAR的Workspace窗口顶部的下拉菜单中有两个选项,Debug和Release。名字和数量可以在菜单栏的Project--Edit?Configuration中增删修改。每个选项都对应着一种配置(也就是项目名称右击Options里的内容),互相是独立的。所以用起来很方便,直接在不同的配置间切换。 ? realse版本与debug版本的区别如下:? DEBUG版本和RELEASE版本的区别:DEBUG版本里会包括基本的调试信息,供开发和调试使用;而RELEASE版本不会包括调试信息,一般是发布给用户使用。所以你会发现DEBUG版本的SIZE比RELEASE版本会大许多。另外,RELEASE版本在编译链接的时候检查会更严格,所以有时候会出现DEBUG版本能使用,而RELEASE版本却会出现一些问题的情况。编译器优化级别,链接器输出文件的格式(是否包含调试信息等)?,当然,debug和release这两种build?configuration的属性,在project创建完之后是可以任意修改的。? 虽然可能在Release版本下没有问题,但是并不等于说程序没有Bug,只是由于运行库进行了优化和丢弃,问题没有明显的展现出来,这样隐含式的错误后期很难再找出来,即使发现了,也由于编码的原因,修改困难。所以考虑还是在开发的阶段尽量的用debug方式编译和修改,当在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?并没有本质的界限,他们只是一组编译选项的集合,编译器只是按照预定的选项行动。事实上,我们甚至能修改这些选项,从而得到优化过的调试版本或是带跟踪语句的发布版本。 再来逐个对照这些选项看看Release版错误是怎样产生。runtime?library:链接哪种运行时刻函数库通常只对程序的性能产生影响。调试版本的runtime?library包含了调试信息,并采用了一些保护机制以帮助发现错误,因此性能不如发布版本。编译器提供的runtime?library?通常很稳定,不会造成?release?版错误;倒是由于?debug?的?runtime?library?加强了对错误的检测,如堆内存分配,有时会出现?debug?有错但?release?正常的现象。应当指出的是,如果?debug?有错,即使?release?正常,程序肯定是有?bug?的,只不过可能是?release?版的某次运行没有表现出来而已。 优化:这是造成错误的主要原因,因为关闭优化时源程序基本上是直接翻译的,而打开优化后编译器会作出一系列假设。这类错误主要有以下几种: 帧指针(frame?pointer)省略(简称?fpo?):在函数调用过程中,所有调用信息(返回地址、参数)以及自动变量都是放在栈中的。若函数的声明与实现不同(参数、返回值、调用方式),就会产生错误。但?debug?方式下,栈的访问通过?ebp?寄存器保存的地址实现,如果没有发生数组越界之类的错误(或是越界“不多”),函数通常能正常执行;release?方式下,优化会省略?ebp?栈基址指针,这样通过一个全局指针访问栈就会造成返回地址错误是程序崩溃。c++?的强类型特性能检查出大

文档评论(0)

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

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

1亿VIP精品文档

相关文档