debug和release的区别有这么大吗? 刚学了学api编程,写了一个小程序,debug版本的运行正常,然而release版本的却似乎陷入了死循环,搞得win2000说内存不够。但是我在debug版本调试的时候我一条一条语句的跟,应该没有问题,内存释放也很正确,而且debug运行一点毛病也没有。是不是vc编译器有问题?哪位大哥遇到过类似的问题,给点线索,谢了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 以前问过类似的问题,众兄弟告我的,希望能给你一点帮助!下面是一点转载:debug里有调试信息,release没有,也就是说release下编译的程序不能设断点调试,release下生成的文件要比debug下生成的文件小release版本是比较安全的版本release 和 debug 的不同点:1、release 没有 debug information & symbols,比如每段code对应的源文件名和行号。2、release 不包含 MFC 的诊断代码,如 Assert, Dump 以及相关的宏都不会被编译。3、relesse 被大幅度优化,(debug 生成的二进制代码严格的符合源代码),比如:for(int i = 0; i < 16; i++) string[i] = '\0';编译成:__asm { xor eax,eax mov dword ptr [string],eax mov dword ptr [string+4],eax mov dword ptr [string+8],eax mov dword ptr [string+12],eax} See the two nice articles below, very useful ,FYI :http://www.codeproject.com/debug/releasemode.asphttp://www.codeproject.com/debug/survivereleasever.asp 代码没有问题,而且代码比较长,大致结构是这样的:A *p,*plast;p = malloc(sizeof(A));for(;;;){ .... plast = malloc(sizeof(A)); .... p->next = plast; //fputs(filehandle, "...."); ....}if(p!=NULL){递归释放空间,并置指针为NULL;}这种结构很简单啊。而且特别奇怪的是,因为release没有调试信息,我回家在代码中加了那个写文件的操作,当作调试信息,程序就没有问题了。去掉后还是老毛病。 看了qing_li73(bluemoon)给的链接文章,把优化选项改成其他的(缺省的是最大速优化)就可以了。看来还是编译器在优化的时候的问题。可是为什么我加上写文件的操作就没有问题呢?是不是这条语句把编译器对这部分代码的优化打乱了?呵呵,瞎想的。 VC中CTreeView 中使用CDialogBar的问题,请求帮助!!! 截屏代码,请高手加个注释给详细解释下内部的实现细节 请教,如何在对话框中延时显示文字 dll有什么好处? 求助:进入文件夹时,触发一个事件 已经知道了某节点,如何得到他的文本内容mshtml 这个Warning的意思是什么? 如何取行Word所在的路径、word与数据库??在线,急 如何在桌面上创建一个显示倒计时的对话框? 阅读《高质量C++编程指南》时的一个疑惑-头文件定义的问题。 有没有汇编高手??? 高分求救!! 怎样用C实现往ACCESS库中添加一条记录?
1、release 没有 debug information & symbols,比如每段code对应的源文件名和行号。
2、release 不包含 MFC 的诊断代码,如 Assert, Dump 以及相关的宏都不会被编译。
3、relesse 被大幅度优化,(debug 生成的二进制代码严格的符合源代码),比如:
for(int i = 0; i < 16; i++)
string[i] = '\0';
编译成:
__asm {
xor eax,eax
mov dword ptr [string],eax
mov dword ptr [string+4],eax
mov dword ptr [string+8],eax
mov dword ptr [string+12],eax
}
http://www.codeproject.com/debug/survivereleasever.asp
A *p,*plast;
p = malloc(sizeof(A));
for(;;;)
{
....
plast = malloc(sizeof(A));
....
p->next = plast;
//fputs(filehandle, "....");
....
}
if(p!=NULL)
{
递归释放空间,并置指针为NULL;
}这种结构很简单啊。而且特别奇怪的是,因为release没有调试信息,我回家在代
码中加了那个写文件的操作,当作调试信息,程序就没有问题了。去掉后还是老毛
病。