Version -- 软件的公开发行版本,强调功能性。通常在功能方面有一定的/重大改变、改进或增加,包括对一些重大bug的修复。例如:V10, V101, V20, V23,Windows 2000, XP, Vista, 7 等。
Release -- 软件的公开发行版本,强调软件由调试/内测阶段转为正式发布/发行阶段。
Build -- 对程序源代码做任何修改并重新编译后生成的版本,可能发生在软件公开发行前的调试、优化、测试阶段,也可能发生在软件正式发布后。同release相比,其发生较为频繁,每编译一次,即会产生一个 build。例如:SDL Trados 830863 (Build 863)
Edition -- 通常表示按特定对象、特定群体进行分类的软件版本,强调软件的目标受众。例如: Trados 65 Freelance Edition, LSP Edition; Windows XP Home Edition, BussIness Edition。
程序一般分为Debug版本和Release版本,Debug版本用于内部调试,Release版本发行给用户使用Release版称为发行版,Debug版称为调试版。Debug中可以单步执行、跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢。Release版运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。Release的exe文件链接的是标准的MFC DLL(Use MFC in a shared or static dll)。这些DLL在安装Windows的时候,已经配置,所以这些程序能够在没有安装Visual C++ 60的机器上运行。而Debug版本的exe链接了调试版本的MFC DLL文件,在没有安装Visual C++60的机器上不能运行,因为缺相应的DLL,除非选择use static dll when link。C++拷贝构造函数和赋值运算符有那些不同和相同点。
1 变量。
大家都知道,debug跟release在初始化变量时所做的 *** 作是不同的,debug是将每个字节位都赋成0xcc(注1),而release的赋值近
似于随机(我想是直接从内存中分配的,没有初始化过)。这样就明确了,如果你的程序中的某个变量没被初始化就被引用,就很有可能出现异常:用作控制变量将
导致流程导向不一致;用作数组下标将会使程序崩溃;更加可能是造成其他变量的不准确而引起其他的错误。所以在声明变量后马上对其初始化一个默认的值是最简
单有效的办法,否则项目大了你找都没地方找。代码存在错误在debug方式下可能会忽略而不被察觉到,如debug方式下数组越界也大多不会出错,在
release中就暴露出来了,这个找起来就比较难了:( 还是自己多加注意吧
2 自定义消息的消息参数。
MFC为我们提供了很好的消息机制,更增加了自定义消息,好处我就不用多说了。这也存在debug跟release的问题吗?答案是肯定的。在自定义消息
的函数体声明时,时常会看到这样的写法:afx_msg LRESULT OnMessageOwn();
Debug情况下一般不会有任何问题,而当你在Release下且多线程或进程间使用了消息传递时就会导致无效句柄之类的错误。导致这个错误直接原因是消
息体的参数没有添加,即应该写成:afx_msg LRESULT OnMessageOwn(WPARAM wparam,
LPARAM lparam); (注2)
3 release模式下不出错,但debug模式下报错。
这种情况下大多也是因为代码书写不正确引起的,查看MFC的源码,可以发现好多ASSERT的语句(断言),这个宏只是在debug模式下才有效,那么就
清楚了,release版不报错是忽略了错误而不是没有错误,这可能存在很大的隐患,因为是Debug模式下,比较方便调试,好好的检查自己的代码,再此
就不多说了。
4 ASSERT, VERIFY, TRACE调试宏
这种情况很容易解释。举个例子:请在VC下输入ASSERT然后选中按F12跳到宏定义的地方,这里你就能够发现Debug中ASSERT要执行
AfxAssertFailedLine,而Release下的宏定义却为"#define ASSERT(f)
((void)0)"。所以注意在这些调试宏的语句不要用程序相关变量如i++写 *** 作的语句。VERIFY是个例外,"#define
VERIFY(f) ((void)(f))",即执行,这里的作用就不多追究了,有兴趣可自己研究:)。
总结:
Debug与Release不同的问题在刚开始编写代码时会经常发生,99%是因为你的代码书写错误而导致的,所以不要动不动就说系统问题或编译器问题,
努力找找自己的原因才是根本。我从前就常常遇到这情况,经历过一次次的教训后我就开始注意了,现在我所写过的代码我已经好久没遇到这种问题了。下面是几个
避免的方面,即使没有这种问题也应注意一下:
1 注意变量的初始化,尤其是指针变量,数组变量的初始化(很大的情况下另作考虑了)。
2 自定义消息及其他声明的标准写法
3 使用调试宏时使用后最好注释掉
4 尽量使用try - catch()
5 尽量使用模块,不但表达清楚而且方便调试。
以上就是关于版本Version,Release,Build 和 Edition 之间的区别全部的内容,包括:版本Version,Release,Build 和 Edition 之间的区别、release版本的可执行程序为什么非常大、编译成release版本与debug版本的程序有何执行上的区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)