• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

为什么可执行文件在Debug下好用,在Release下不好用?

tds168 2008-03-28 10:07:49
为什么生成debug版本的可执行文件可以正常运行,生成RELEASE版本的可执行文件却提示内存不能为读?
...全文
114 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Peking_beyond 2009-08-31
注意看warning 还有就是debug对越界不敏感而release却不行,还有warnning里的一些警告也会使release生成的执行文件无法正常运行
回复
tccqs 2008-03-29
up and mark,,
回复
qiqi5521 2008-03-29
另外,你还需要考虑以下因素:
1、程序有没有调用DLL,ActiveX控件,或者自己程序目录下的数据、设置文件,检查一下Debug和Release目录下是否都提供了这些文件。
2、是否使用 #ifdef _DEBUG 使得Debug和Release版本代码差异很大,如果有,重点检查这些代码。
回复
qiqi5521 2008-03-29
Debug编译和Release编译至少有以下区别:
1、Debug的内存分配不是很紧凑,对于指针访问越界有一定的容忍度。Release就不同了
2、Release版本为了优化速度,不对变量(包括数组)执行初始化。Debug则会初始化。

按照线索,往往能找到问题。为了排查问题,建议你先暂时把Release编译速度优化关闭试一下。
检查一下代码,有没有变量没有初始化。把所有Warning解决掉(有一个编译选项“把警告当作错误对待”,建议打开这个选项)。

如果到最后还是不能解决问题,只好借助工具了,参考http://blog.csdn.net/qiqi5521/archive/2008/03/06/2154074.aspx
回复
suterfo 2008-03-29
将qiqi5521 的答案合起来就差不多了...


但我建议以后写MFC程序最好用Release的,不要用Debug的,免得以后又发现问题再去查,到项目发布的时候再换Release的,哪错也不知道了..
回复
Be_pig 2008-03-29
可能ASSERT()导致的 ,去函数入口处设断点
回复
ZiSheng 2008-03-29
估计是内存访问越界
回复
mr.zhoux 2008-03-28
代码不严谨吧..变量和指针没初始化
回复
zaodt 2008-03-28

设置断点,找问题大概在哪里;


变量赋初始值。
回复
xiahuan77 2008-03-28
你的生成的EXE文件调用了DLL,ActiveX没?
如果有的话,务必将这些文件与EXE文件放在一个目录下。
回复
arong1234 2008-03-28
说明程序有bug(比较多的情况是两种:1。你忽略了一些警告信息,认为他无关大局,实际很重要 2。内存访问越界)
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2008-03-28 10:07
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……