请教高手,debug没问题的程序release有问题一般可能是什么原因?
debug运行没法发现问题,release在有些地方会出非法操作,有可能是哪些原因? 问题点数:50、回复次数:10Top
1 楼happyparrot(快乐鹦鹉)回复于 2004-04-02 14:11:36 得分 5
1。在ASSERT断言中,有有效语句。因为ASSERT断言在RELEASE版本被忽略。可以用VERIFY替代
2。检查有无DEBUG版本的判断语句。确定在 #ifdef _DEBUG后的语句确实与RELEASE版本无关。
3。程序用到的动态库等文件,是否确认放在exe文件所在目录。当用VC执行程序时,与dsp文件同目录。如果单独执行exe文件,需要与exe文件同目录。
Top
2 楼hardstudylulin(思过崖)回复于 2004-04-02 14:17:24 得分 5
请检查相关变量是否赋初值,特别是多维数组。Top
3 楼KyoUs(符号)回复于 2004-04-02 14:39:39 得分 5
打开了文件,进行操作,最后关了文件
又有地方,直接用文件指针。。就容易在RELEASE时有错啊Top
4 楼happyparrot(快乐鹦鹉)回复于 2004-04-02 14:51:03 得分 5
楼上,楼主是说DEBUG版本和RELEASE版本的问题,不是释放的问题吧。Top
5 楼he_sl(he_sl)回复于 2004-04-02 15:09:11 得分 5
哈哈,最近我经常发现Release没问题,Debug报内存错误。又有哪些原因呢?Top
6 楼happyparrot(快乐鹦鹉)回复于 2004-04-02 15:11:51 得分 5
那也是有可能又这么问题引起的。比如你的ASSERT中的句子错误。或者_DEBUG后的语句错误等等。Top
7 楼bjskyhorse()回复于 2004-04-02 15:15:23 得分 5
有没有什么指针没有初始化一类的毛病.Top
8 楼striking(庸人自扰)回复于 2004-04-02 15:48:14 得分 5
一般是变量初始化问题 , 因为在debug中, vc编译器会自动会为变量初始化, 但在release就没有了. 特别是指针问题. . 如果定义了一个指针而没有初始化, 在release版本中在判断某某指针是否为NULL有可能是错的Top
9 楼Atry()回复于 2004-04-02 16:31:45 得分 5
看精华Top
10 楼sgnaw(李逍遥)回复于 2004-04-13 14:47:06 得分 5
To 楼主 ,我在另外一个类似的贴子作了回答
http://expert.csdn.net/Expert/topic/2955/2955693.xml?temp=.3361933
内容大致如下:
happyparrot(快乐鹦鹉) 说的是现象,是正确的;除此之外,我还想补充一点。
不知楼主有没有想过,为什么要用到 release 的版本呢?我想很重要的原因为是为了优化程序上,使之运行得更快,编出来的 exe 更小。但问题就出在里----优化 ( Optimization )
下面的几点可能在优化时会引起编译错误 ( Compiler bugs ):
1.Storage Allocator Issues
2.Uninitialized Local Variables
3.Bounds Errors
4.Mixed DLLs
5.Run-Time Type Information (RTTI)
6.Linkage Errors
下面的几点可能在优化会引起链接错误 ( Linkage Errors ):
1.Linkage Types
2.Parameter counts
优化过程出现的编译错误
1.Aliasing bugs
2.const and volatile
3.ASSERT and VERIFY
4.memmove and memcpy
5.DLL Hell
Q: 那么,在 release 里出了问题怎么办呢?
A: 简单的来说,请去掉最优化 ( Optimization ),在 Visual C++ 里这样设置
Project->Settings...选择 C/C++ , 在 Category 选择 Optimizations ,然后在 Optimizationss 下接框里选择 Disable (Debug)。在程序中要注意上面提到的可能产生错误的地方,还要小心使用 pragma 宏。
在网上看了好几篇关于 debut/release ( 英文 )文章,它们还有代码片断举例说明,我没一一试过,但我想应该是正确的,人都快看昏了。Top




