你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Debug 和 Release版本区别

[复制链接]
gaosmile 发布时间:2021-2-9 20:39
有很多软件集成开发环境(IDE),比如VS(VC)、IAR等,在创建工程时都会自动生成有Debug 和 Release两个版本。
) l) B+ I% a/ p- B- u( x6 f
有些小伙伴比较纳闷,Debug 和 Release两个版本到底有什么区别?
2 L$ X/ M7 q/ N+ H
下面就来讲讲Debug 和 Release版本区别,及其相关的内容。

3 S& ?# B. \! ]/ A, ]( M+ I- h
1
关于Debug 和 Release版本Debug,顾名思义,就是调试版本;
+ }$ W, ~$ M( k* H7 r
Release,即发布版本,或者说最终释放版本。3 r7 q, q" f1 x6 Q& F2 K. R4 u
在一些项目中,会出现Debug 和 Release两个版本,比如:  m6 `" ~2 m+ a6 c7 f  z* ^! L7 u- I
IAR EWARM:
微信图片_20210209202742.png
) q" p  s$ m$ V" T
VS:
微信图片_20210209202745.png

3 d3 C' T/ J* o( h6 t3 g
一些初学者可能会问,他们二者到底什么差异?
. ^9 Z( o! c7 p: A2 f
其实,Debug 和 Release两个版本其实主要就是工程配置不同。
$ O, s, H) O* ]& V" d
我们这里拿IAR EWARM来说,主要是:Project -> Options 下面的配置选项不同:
微信图片_20210209202749.png

1 m9 M8 O% ?* G
2
Debug 和 Release差异
# c; s& P7 \3 b" |Debug 和 Release两个版本,最根本的区别在于Debug版本多了一些与调试相关的配置内容。0 k8 H7 }7 E( y- X' [
1.生成调试信息6 F# J8 {2 K5 A/ o
Debug版本通常会生成调试信息,而Release通常没有这些信息。
/ u! Q, [) c2 J6 y
比如IAR EWRAM:# |/ R. g0 |: j! q4 C# K
微信图片_20210209202752.png
+ P- m0 J1 ^: v9 s
这里的“生成调试信息”其实包含了很多关于调试的信息,如果勾选会多出“.pbd”、 “.browse”、 “.linf”等与调试有关的信息。2 R- [8 a' c: p1 q1 X
补充①“.pbd”、 “.browse”为浏览信息的文件,“.linf”为链接配置相关的文件。具体可以参看:IAR系列教程12_IAR文件类型描述。
$ w3 P8 o2 k- v3 L6 F8 ?( q6 J
补充②这个配置信息保存在“.ewp”(工程配置)文件下,包含了Debug 和 Release两个版本的配置信息:% ~& F' }9 `9 Y) p( e

  1. 6 F3 r- t: c8 _; _
  2. <configuration>
    : T% S* q. B# d( @/ ?! B5 q
  3.     <name>Debug</name>/ P. U% K# ?( M: g
  4.   ...配置8 J' M8 E, b+ K
  5.   </configuration>
    4 e/ e8 `3 L/ ^4 b$ h  U3 [  }

  6. 4 L: \! E6 ~4 n
  7. <configuration>, v- [( D# Y. N$ v8 m6 _0 M; k
  8.     <name>Release</name>7 w2 ]! n1 e$ ~/ w" x
  9.   ...配置
    1 S+ P) x' I& l5 J+ [' f
  10. </configuration>1 A& g9 C; [% ?% ^; X
复制代码
) p7 n* O9 u3 o; |4 O8 f

你可以对比一下两个配置的差异,就知道二者的一些区别:
' s) h6 O9 }' f7 Q/ M) o

微信图片_20210209202755.png


4 L$ ~+ _0 K( C% G5 f% w

补充③Keil MDK类似,也有类似的关于调试的配置:Projcet -> Options for Target:
微信图片_20210209202758.png

% s% i& v+ J: e+ g3 `
2.预处理/ m; d9 ?' A* }( T8 B
Debug版本通常会有“DEBUG”相关的预处理(宏定义); K8 m/ }3 f4 ]+ X1 f+ h: d
不知道大家经常用类似下面的调试宏定义没有:( p" [$ r7 a) g0 x6 \  n

  1. & g' z. ]# [; \' U3 e: S; S4 L$ u
  2. #ifdef DEBUG
    1 d  q1 ~& T5 s% I8 Z
  3.   //Debug调试版本相关的配置strongerHuang
    3 b1 d& u3 J5 {# A
  4. #else2 z. s4 Q$ ]$ i
  5.   //Release发布版本相关的配置strongerHuang
    " x% `- {+ ?; w+ P- x! C: N
  6. #endif
复制代码

$ \& i# n, p& j0 l
比如最常见的就是printf(打印信息),会通过“DEBUG”调试信息打开/关闭打印输出信息。
; E( \5 Z; r. i; V$ {2 M4 o/ g4 V
同理,这里与ASSERT断言类似,就是通过宏定义开关来打开/关闭,比如:
* W4 Q% k1 W2 ~/ @' \
  1. & j1 I( P8 M: C
  2. #ifdef  USE_FULL_ASSERT$ [0 z. A' O" \, T" N$ v" N1 T
  3.   void assert_failed(uint8_t* file, uint32_t line);" o  {  y1 ~. ^) ]9 w# @' f9 r" u
  4. #else# d9 h5 o% j4 I8 k, |' k3 T" m
  5.   #define assert_param(expr) ((void)0)/ \1 ]7 C# B# E. F; W4 _
  6. #endif
复制代码
) b- `1 j, `! O) n' C
IAR 默认是在Release版本下预定义NDEBUG:
! }) J4 s/ u+ }. D+ y  t
微信图片_20210209202802.png

; G3 @! X. v  M; g
当然,这里全网可以自己根据自己实际情况进行定义。
( Y) g* I6 y% Y9 k* }1 V
3.其他不同" s& F, Y2 Y* d4 Y+ D, |9 {
比如:在 Release 版本下增加一些axf转bin的命令:
微信图片_20210209202805.png

- x1 s! m2 Z; Q+ \
实际项目中,Debug 和 Release两个版本可能还有很多不同的配置,按理说“Options”下面的很多配置都可以不同。
3 T! F" x; ?6 ?* d
3
“版本”说明
3 K8 K. O0 n! n2 l& h1 k% x3 I5 g, p这里是说的“版本”是指Debug 和 Release中的版本,并不是软件版本或其他什么版本。
. V! F' Z' R8 B& G1 p5 d
Debug 和 Release都是自己配置的“版本”,只是有些IDE会自动生成这两个版本。
0 j, T& R5 `  m& i
还是拿Keil 和 IAR 来说明,源码和工程结构都一样,只是配置不一样,简单来说,就是一个“克隆”版本。
: X7 D# g  @3 `

8 P5 ^$ q; Z9 W
1.IAR EWARM. @8 z) f9 z, b; a
Project -> Edit Configuartions:
9 q* n- `! y/ [8 C% r  D3 k( p
微信图片_20210209202808.png

6 `8 A1 v$ H: L6 T4 x
2.Keil MDK
; Y4 R: }* K! p5 Y, \7 ?Project - Manage ->Project items:
微信图片_20210209202812.png
; A4 N7 }- \. U# K
2 o5 o& B/ ?; H
; E2 K) ^/ U, ?1 v" Y, |( I
赞 收藏 评论0 发布时间:2021-2-9 20:39

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版