Release/Debug版本生成的应用的不同? Release/Debug版本生成的应用的有什么不同?为什么有些程序在Release版本下可以通过,而在Debug版本下不可以呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 debug 中包含在量调试信息 回复人: CQP(悄悄的我走了,正如我悄悄的来) ( ) 信誉:100 2003-7-1 12:19:25 得分:10 关于debug和release的不同的两点讨论 - (1.5kg, shanghai, 15:39 2002-12-20)======================================================在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当头一棒啊,可是疼归疼,问题总要解决,下面将讲述一下我的两点经验,看看是不是其中之一:1. 变量。 大家都知道,debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc,而release的赋值近似于随机(我想是直接从内存中分配的,没有初始化过,但debug为什么不是0xff或0x00或其他什么的就不得而知了)。这样就明确了,如果你的程序中的某个变量没被初始化就被引用,就很有可能出现异常:用作控制变量将导致流程导向不一致;用作数组下标将会使程序崩溃;更加可能是造成其他变量的不准确而引起其他的错误。所以在声明变量后马上对其初始化一个默认的值是最简单有效的办法,否则项目大了你找都没地方找。代码存在错误在debug方式下可能会忽略而不被察觉到,如debug方式下数组越界也大多不会出错,在release中就暴露出来了,这个找起来就比较难了:( 还是自己多加注意吧2. 自定义消息的消息参数。 MFC为我们提供了很好的消息机制,更增加了自定义消息,好处我就不用多说了。这也存在debug跟release的问题吗?答案是肯定的。在自定义消息的函数体声明时,时常会看到这样的写法:afx_msg LRESULT OnMessageOwn(); 当你在多线程或进程间使用了消息传递时就会导致无效句柄之类的错误。这个原因就是消息体的参数没有添加,即应该写成:afx_msg LRESULT OnMessageOwn(WPARAM wparam, LPARAM lparam); (具体原因我也不太清楚,是不是因为调用时按着默认的参数多分配了WPARAM+LPARAM的空间而破坏了应用程序的内存空间?还请高手多指点)避免的方法:1. 注意变量的初始化2. 自定义消息的标准写法3. 使用调试语句TRACE等时使用后最好注释掉4. 尽量使用try - catch(...)====================================================== mfc游戏鼠标移动 松下 FX-p1121打印机如何准确走纸的问题???? 一个非常非常简单的问题:VC+ACCESS 请问怎么能得到一个窗口的句柄???我没分了,请大家帮帮忙 谁有Nmap扫描器的源码,给一份看看啊! 基于win32程序的EXE文件可不可以带参数?你基于main一样。大家来看一下,UP有分啦, typedef和#define有什么区别? 建一个mfc登录窗口 与数据库相连 关于socket通信一个不解的问题。 请教各位"前辈"! 请教24位彩色图像处理的问题?? 如何用其它的键,比如回车键选择CheckBox 而不是空格键
关于debug和release的不同的两点讨论 - (1.5kg, shanghai, 15:39 2002-12-20)======================================================在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当头一棒啊,可是疼归疼,问题总要解决,下面将讲述一下我的两点经验,看看是不是其中之一:
1. 变量。
大家都知道,debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc,而release的赋值近似于随机(我想是直接从内存中分配的,没有初始化过,但debug为什么不是0xff或0x00或其他什么的就不得而知了)。这样就明确了,如果你的程序中的某个变量没被初始化就被引用,就很有可能出现异常:用作控制变量将导致流程导向不一致;用作数组下标将会使程序崩溃;更加可能是造成其他变量的不准确而引起其他的错误。所以在声明变量后马上对其初始化一个默认的值是最简单有效的办法,否则项目大了你找都没地方找。代码存在错误在debug方式下可能会忽略而不被察觉到,如debug方式下数组越界也大多不会出错,在release中就暴露出来了,这个找起来就比较难了:( 还是自己多加注意吧2. 自定义消息的消息参数。
MFC为我们提供了很好的消息机制,更增加了自定义消息,好处我就不用多说了。这也存在debug跟release的问题吗?答案是肯定的。在自定义消息的函数体声明时,时常会看到这样的写法:afx_msg LRESULT OnMessageOwn(); 当你在多线程或进程间使用了消息传递时就会导致无效句柄之类的错误。这个原因就是消息体的参数没有添加,即应该写成:afx_msg LRESULT OnMessageOwn(WPARAM wparam, LPARAM lparam); (具体原因我也不太清楚,是不是因为调用时按着默认的参数多分配了WPARAM+LPARAM的空间而破坏了应用程序的内存空间?还请高手多指点)
避免的方法:
1. 注意变量的初始化
2. 自定义消息的标准写法
3. 使用调试语句TRACE等时使用后最好注释掉
4. 尽量使用try - catch(...)======================================================