永发信息网

编译成release版本与debug版本的程序有何执行上的区别

答案:2  悬赏:0  手机版
解决时间 2021-04-14 09:39
编译成release版本与debug版本的程序有何执行上的区别
最佳答案
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. 尽量使用模块,不但表达清楚而且方便调试。
全部回答
1 变量。 大家都知道,debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc(注1),而release的赋值近 似于随机(我想是直接从内存中分配的,没有初始化过)。这样就明确了,如果你的程序中的某个变量没被初始化就被编译成release版本与debug版本的程序有何执行上的区别
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
沈阳旺福再生资源回收公司地址在哪,我要去那
客户服务座右铭,服务行业的座右铭
QQ太阳直接升到皇冠
到德阳汽车客运北站怎么坐车,德阳汽车客运北
男人难受的时候要怎么办。
填空题排泄有三个途径:绝大部分的________、
寻找一部言情小说
2000元至3000元能玩穿越的游戏本求推荐。
锐界科技包有什么,锐界2.0T两驱豪锐型可以加
江苏君同物业管理有限公司地址有知道的么?有
如火如提高肺活量?
求部落冲突号5本以上大神帮
丝路英雄里英雄修炼算不算移动啊?能进行假期
化简比:2米:80厘米.他俩谁做得对?我认为
什么叫内分泌失调?
推荐资讯
介绍几款能在电脑上玩的机甲类游戏,类似于特
《龙兄虎弟》中成龙开始头发很短,后来就看他
问道里面土的法术有那些?
晨会员工激励口号,怎么激励员工努力工作呢
登录邮件服务器时出错。“密码”被拒绝。 帐
电视和微机荧光屏上画面的形成原理是:电子经
爱字部首怎么读,廷在名字里念什么
为什么总是死机
我的电脑是神州承运F300T 新买的机器 但是经
如图,△ABC中,AB=AC,∠A=40°,则∠B的度
QQ登入窗的信息该怎么去掉啊?
已知函数fx是偶函数 gx是奇函数,且fx+gx=(1-2
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?