release版本和debug版本的程序有什么区别?

sharpsword 2003-01-10 11:14:48
我的一个程序编译成release版本和debug版本都能正常运行,debug版本运行结果正确,单步执行也不会出错。可release版结果却出人意料,可又不能单步调试,不知是何原因。
望高人指点!
...全文
80 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharpsword 2003-01-10
  • 打赏
  • 举报
回复
zx_sanjin(1.5kg)说的对。
是我忘记判断指针是否超出范围了。
qing_li73 2003-01-10
  • 打赏
  • 举报
回复
See the two classic articles below, FYI:

http://www.codeproject.com/debug/survivereleasever.asp
http://www.codeproject.com/debug/releasemode.asp
zx_sanjin 2003-01-10
  • 打赏
  • 举报
回复
举个例子:

int a;
debug时a值恒定,总为cdcdcdcd
release时a值不定,为当时内存值

这时你在使用a时就会引起结果的不一致,甚至导致溢出!
所以对变量初始化尤其是对指针,数组变量初始化是一个良好的习惯!

debug与release的不同大多是因为你的程序代码写的不规范,不严谨而造成的。
sunjun240 2003-01-10
  • 打赏
  • 举报
回复
指针!
我以前也遇见过这种问题

同意loopyifly的
zhdleo 2003-01-10
  • 打赏
  • 举报
回复
可以这么说:
release版本取掉了debug信息,进行了优化。

举个例子:
那断言----Assertion来说,
很多库函数本身的实现代码里,包含了很多的断言。
通过ASSERT宏来声明这些断言,
这个宏只有在程序的debug版里才有效。
而在release版里它完全被忽略, 为的也就是减少系统的消耗,

至于你说的debug版本运行结果正确,可release版却出错,
可能的问题也就在这些断言里,特别是自己写的断言。

比如ASSERT(***) 这***里不光是判断,如果还有其他创建之类的操作,
到了release版,被忽略后,也就容易带来问题。
loopyifly 2003-01-10
  • 打赏
  • 举报
回复
用指针之前有没有对指针进行初试化

常遇到这种问题,一般都是自己的代码写的不好造成的
linjiework 2003-01-10
  • 打赏
  • 举报
回复
估计是指针使用的问题。
我以前也遇见过这种问题。
zhenxizhou 2003-01-10
  • 打赏
  • 举报
回复
release版本debug信息
Runn 2003-01-10
  • 打赏
  • 举报
回复
强烈关注
microyzy 2003-01-10
  • 打赏
  • 举报
回复
release没有包含debug信息
查一查你代码里debug和release分开执行的代码部分
突击召唤师 2003-01-10
  • 打赏
  • 举报
回复
release版本取掉了debug信息,进行了进一步优化。如果你的程序时序逻辑或者空间使用稍有问题,就会看出来。
因为没有调试信息,所以也不能单步了。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧