关注+星标公众,不错过精彩内容

作者 | strongerHuang

微信公众号 | strongerHuang

很多集成开发环境(IDE),比如VS(VC)、IAR等,在创建工程时都会自动生成有Debug 和 Release两个版本。

有些小伙伴比较纳闷,Debug 和 Release两个版本到底有什么区别?

下面就来讲讲Debug 和 Release版本区别,及其相关的内容。

关于Debug 和 Release版本

Debug,顾名思义,就是调试版本;

Release,即发布版本,或者说最终释放版本。

在一些项目中,会出现Debug 和 Release两个版本,比如:

IAR EWARM:

VS:

一些初学者可能会问,他们二者到底什么差异?

其实,Debug 和 Release两个版本其实主要就是工程配置不同。

我们这里拿IAR EWARM来说,主要是:Project -> Options 下面的配置选项不同:

Debug 和 Release差异

Debug 和 Release两个版本,最根本的区别在于Debug版本多了一些与调试相关的配置内容。

1.生成调试信息

Debug版本通常会生成调试信息,而Release通常没有这些信息。

比如IAR EWRAM:

这里的“生成调试信息”其实包含了很多关于调试的信息,如果勾选会多出“.pbd”、 “.browse”、 “.linf”等与调试有关的信息。

补充①

“.pbd”、 “.browse”为浏览信息的文件,“.linf”为链接配置相关的文件。具体可以参看:IAR系列教程12_IAR文件类型描述

补充②

这个配置信息保存在“.ewp”(工程配置)文件下,包含了Debug 和 Release两个版本的配置信息:

<configuration><name>Debug</name>...配置</configuration><configuration><name>Release</name>...配置
</configuration>

你可以对比一下两个配置的差异,就知道二者的一些区别:

补充③

Keil MDK类似,也有类似的关于调试的配置:Projcet -> Options for Target:

2.预处理

Debug版本通常会有“DEBUG”相关的预处理(宏定义)

不知道大家经常用类似下面的调试宏定义没有:

#ifdef DEBUG//Debug调试版本相关的配置strongerHuang
#else//Release发布版本相关的配置strongerHuang
#endif

比如最常见的就是printf(打印信息),会通过“DEBUG”调试信息打开/关闭打印输出信息。

同理,这里与ASSERT断言类似,就是通过宏定义开关来打开/关闭,比如:

#ifdef  USE_FULL_ASSERTvoid assert_failed(uint8_t* file, uint32_t line);
#else#define assert_param(expr) ((void)0)
#endif

IAR 默认是在Release版本下预定义NDEBUG:

当然,这里全网可以自己根据自己实际情况进行定义。

3.其他不同

比如:在 Release 版本下增加一些axf转bin的命令

实际项目中,Debug 和 Release两个版本可能还有很多不同的配置,按理说“Options”下面的很多配置都可以不同。

“版本”说明

这里是说的“版本”是指Debug 和 Release中的版本,并不是软件版本或其他什么版本。

Debug 和 Release都是自己配置的“版本”,只是有些IDE会自动生成这两个版本。

还是拿Keil 和 IAR 来说明,源码和工程结构都一样,只是配置不一样,简单来说,就是一个“克隆”版本。

1.IAR EWARM

Project -> Edit Configuartions:

2.Keil MDK

Project - Manage ->Project items:

相关的内容可以参看我的教程:

【专栏】IAR系列教程

【专栏】Keil系列教程

------------ END ------------

关注公众号后台回复『嵌入式开发』『单片机』相关文章。

回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

点击“阅读原文”查看更多分享

嵌入式开发 | 软件项目中 Debug 和 Release 版本的差异相关推荐

  1. 软件项目中Debug 和 Release版本差异

    关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | 嵌入式专栏 有很多软件集成开发环境(IDE),比如VS(VC).IAR等,在创建工程时都会自动生成有Debug ...

  2. VC中debug和release版本的区别

    vc中debug和release的不同 收藏  在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当 ...

  3. VS中Debug和Release版本的区别

    之前写过一段代码,能在VS2013的Release下运行,但是不能在Debug下运行,所以又深入学习了一番,下面是学到的经验.(橙色表示引用,红色表示重点) VS中的程序有Debug和Release两 ...

  4. [周年感悟]看软件项目中的四种角色

    工作一年了,这一年没像大学那样拼命的发帖,拼命的写博客.然而毕竟是过了一年了,便以此文纪念我逝去的2011年吧! 2011年3月份到公司实习,实习到5月,然后回学校做毕业设计,7月份正式入职.若是从实 ...

  5. 【软件工程】用户在软件项目中承担的工作

    终端用户 终端用户既指软件的最终操作者,也是软件工程内的一个概念,指终端用户的抽象集合,用于区分单纯使用软件的用户和进行软件开发的开发者.这种抽象主要在设计用户界面时有用,用于代表普通用户的共同特性. ...

  6. [项目管理]工业工程理论在软件项目中的实践

    摘要:结合工业工程理论,对公司现有软件项目开发流程进行总结分析,优化项目管理流程.提升项目作业效率. 关键词:工作研究:流程分析:降低成本 引言 本人在IT行业从事软件开发工作,经过本学期工业工程伦理 ...

  7. 软件项目中的功能风险矩阵

    软件项目中的功能风险矩阵 黄国强 2011-9-9 仿照美国总统艾森豪威尔的"时间管理优先矩阵",我画了一个项目功能风险矩阵图. 软件开发中,我们最先要做的就是必要而且有风险的事情 ...

  8. 软件项目中如何开展有效的需求评审

    1.需求评审的重要性 在软件项目中,需求分析是最开始的工作,同时也是最重要的工作.需求分析如果做得不够详细或者是偏离用户需求或者是存在缺陷的话,往往会给项目带来灭绝性的灾难,不重视需求过程的项目团队将 ...

  9. 【创科之龙】零基础学习嵌入式开发以及项目实战开发【第二期视频】

    [创科之龙]零基础学习嵌入式开发以及项目实战开发[学习交流零基础火热进行ing] 大家好,我是aiku,上期的项目学习资料在电子发烧友论坛上分享,大家觉得都很好. 在这里我首先要感谢电子发烧友给我们的 ...

最新文章

  1. iOS开发-Protocol协议及委托代理(Delegate)传值
  2. 标准库中的智能指针shared_ptr
  3. 为什么说能源管理是分布式光伏发电的突破口?
  4. 欢迎来到OpenGL的世界
  5. java 扫描所有子类_java获取全部子类或接口的全部实现
  6. restful web_RESTful Web服务可发现性,第4部分
  7. gulp+PC前端静态页面项目开发
  8. 类选择器遍历赋值_利用反射实现配置表数据到类对象数据的转换
  9. iphone最新款手机_苹果用户不换安卓手机的8点原因,最后一点最关键
  10. 使用代码更新 UIVersion 属性
  11. 20100823工作记录
  12. 《流畅的Python》读书笔记——接口:从协议到抽象基类
  13. 智能电话销售机器人源码搭建部署系统电话机器人源码
  14. 计算机考试后勤保障管理制度,计算机在高校后勤管理的应用
  15. matlab符号函数绘图法_MATLAB符号运算实验
  16. BIOS修改mbr为gpt的步骤
  17. 73个必会的经济类热词
  18. H3CNE综合小实验
  19. scp在命令行中带密码远程拷贝文件
  20. 怎么制作云端服务器,自己搭建云端服务器

热门文章

  1. 以太坊2.0、分片、DAG、链下状态通道……概述区块链可扩展性的解决方案!
  2. linux修改主机名(永久)
  3. Git回退到某个历史版本
  4. Ubuntu下导入PySpark到Shell和Pycharm中(未整理)
  5. 什么是跨域?如何解决?
  6. Sandcastle Help File Builder
  7. java实现按钮名字自定义_在Java中创建自定义按钮
  8. 系统性能-嵌入式系统性能优化简述
  9. 珠宝销售系统的设计与实现
  10. SQLServer 创建只读用户和授权