软件项目中Debug 和 Release版本差异
关注+星标公众号,不错过精彩内容
作者 | strongerHuang
微信公众号 | 嵌入式专栏
有很多软件集成开发环境(IDE),比如VS(VC)、IAR等,在创建工程时都会自动生成有Debug 和 Release两个版本。
有些小伙伴比较纳闷,Debug 和 Release两个版本到底有什么区别?
下面就来讲讲Debug 和 Release版本区别,及其相关的内容。
嵌入式专栏
1
关于Debug 和 Release版本
Debug,顾名思义,就是调试版本;
Release,即发布版本,或者说最终释放版本。
在一些项目中,会出现Debug 和 Release两个版本,比如:
IAR EWARM:
VS:
一些初学者可能会问,他们二者到底什么差异?
其实,Debug 和 Release两个版本其实主要就是工程配置不同。
我们这里拿IAR EWARM来说,主要是:Project -> Options 下面的配置选项不同:
嵌入式专栏
2
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”下面的很多配置都可以不同。
嵌入式专栏
3
“版本”说明
这里是说的“版本”是指Debug 和 Release中的版本,并不是软件版本或其他什么版本。
Debug 和 Release都是自己配置的“版本”,只是有些IDE会自动生成这两个版本。
还是拿Keil 和 IAR 来说明,源码和工程结构都一样,只是配置不一样,简单来说,就是一个“克隆”版本。
1.IAR EWARM
Project -> Edit Configuartions:
2.Keil MDK
Project - Manage ->Project items:
相关的内容可以参看我的教程:
【专栏】IAR系列教程
【专栏】Keil系列教程
------------ END ------------
欢迎关注我的公众号:
欢迎关注我的视频号:
点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。
软件项目中Debug 和 Release版本差异相关推荐
- 嵌入式开发 | 软件项目中 Debug 和 Release 版本的差异
关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 很多集成开发环境(IDE),比如VS(VC).IAR等,在创建工程时都会自动生成有D ...
- VC中debug和release版本的区别
vc中debug和release的不同 收藏 在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当 ...
- VS中Debug和Release版本的区别
之前写过一段代码,能在VS2013的Release下运行,但是不能在Debug下运行,所以又深入学习了一番,下面是学到的经验.(橙色表示引用,红色表示重点) VS中的程序有Debug和Release两 ...
- VS Debug和Release版本的区别
VS Debug和Release版本的区别 1. 变量. 大家都知道,debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc(注1),而release的赋值 ...
- Debug和release版本区别 原码反码补码的转换及存储
#define _CRT_SECURE_NO_WARNINGS 1 //Debug和release版本区别(VS2019版) //例子 #include<stdio.h> //int m ...
- 如何在软件项目中生成物料清单(SBOM)
随着软件合规.断供.漏洞等风险日益受到重视,需求方会要求开发团队提供软件的详细信息. 常用的方法是,研发团队从源码.配置文件.生成交付物等处提取所需信息按需求方要求的格式形成报告.这种手工生成方法,不 ...
- C++ debug和release版本运行结果不一致浅析
问题 最近在写 AVL 树的问题,其中涉及到大量的指针操作.但由于出现了 bug ,在没有修复时出现了单步调试和直接编译运行的结果不一样的情况.大致情况是:单步调试能够根据逻辑把结果运行出来,但是编译 ...
- [周年感悟]看软件项目中的四种角色
工作一年了,这一年没像大学那样拼命的发帖,拼命的写博客.然而毕竟是过了一年了,便以此文纪念我逝去的2011年吧! 2011年3月份到公司实习,实习到5月,然后回学校做毕业设计,7月份正式入职.若是从实 ...
- 【软件工程】用户在软件项目中承担的工作
终端用户 终端用户既指软件的最终操作者,也是软件工程内的一个概念,指终端用户的抽象集合,用于区分单纯使用软件的用户和进行软件开发的开发者.这种抽象主要在设计用户界面时有用,用于代表普通用户的共同特性. ...
最新文章
- ros安装orocos造成工作空间编译不通过
- Docker Compose安装
- c++ 新技能get 统计单词数
- java反射机制(三)---java的反射和代理实现IOC模式 模拟spring
- 油井在哪_身边榜样 | 张景岗:“油井越‘生气,自己越开心”
- tensorflow2 tensorboard可视化使用
- 百度地图no result available_【整理之路二】百度地图的路径规划和调用本机地图导航...
- 向高端应用进军 杰和推高计算四路服务器
- CorelDRAWX4的VBA插件开发(六)录制宏与调试
- C标准库stdio源码分析
- pH响应UV交联壳聚糖水凝胶/氨基葡聚糖基生物杂化水凝胶NMPA-CS壳聚糖水凝胶的制备
- 地震观测仪器的历史和发展趋势(二)
- 射手影音播放器android,射手影音播放器安卓版
- 微信跳一跳游戏的脚本
- 在Win10家庭中文版系统安装Hyper-V
- 读书笔记-effective STL
- 基于FaceNet的实时人脸识别训练
- 图像的阈值分割(Optimum Thresholding)
- python开发工具之神兵利器_擅用Python,强推这 7 种 神兵利器!
- css !important用法以及CSS样式使用优先级判断