关于DEBUG和RELEASE的一些问题及解决方法

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

[release][版本][调试]release版本下调试正常运行exe出错-VC/MFC/基础类10月9th,2010byadminPostedinVC/MFC|NoComments»我做的一个调用dll的程序,在debug下调试和运行exe都正常在release下调试也正常,但是直接运行release下的exe就会挂掉,请高人指点一下,到底是什么原因。程序中有调用外部工具执行解压和压缩,因为没有使用多线程,在解压缩的时候会使主框架无响应,在这样的状态下进入调用dll的模块,然后程序执行一半就挂掉了,是不是和解压缩有关呢?不会是跟路径有关吧?程序中使用的相对路径???跟路径无关,都是相对路径而且release下调试是通过的,能正常运行得出结果但是,直接执行release下的exe文件就挂掉了,很奇怪运行就挂掉是指,没有响应?程序崩溃?程序直接消失?没有响应的话,是某个地方阻塞掉了,可以根据程序流程来跟踪,看执行到哪里才没响应的.程序崩溃的话,看看提示是什么,再跟踪程序流程.程序直接消失的话,多半是栈溢出了.挂掉的时候attachprocess一下,再查看堆栈,可以定位出在哪个函数挂掉了。很可能就是路径的问题release调试的时候,可以设置工作目录,其他相对路径都是基于这个工作目录release运行的时候,工作目录应该是其所在的文件夹用几个messagebox调试的看看一定是路径问题!把dll放到release一份看看。把dll放到release目录下,再直接运行exe文件试试.--路径不正确吧。一些指针变量未初始化??字节对齐方式不对??在PostMessage或者在SendMessage处查看,我也碰到这问题,就是这么解决的.80%是相对路径,改成绝对路径试试有没有考虑过权限的问题,调试的时候程序是有DEBUG权限的,直接运行是没有这么高的权限+看下库依赖问题depends顶一个!Tags:,release,版本,调试[release][版本][VC/MFC]急!!~~release版本出现问题-VC/MFC/基础类09月17th,2010byadminPostedinVC/MFC|NoComments»本人的聊天程序在debug的版本下可以顺利发送和接收对方聊天消息,但是在release版本下却出现了严重问题,症状如下:第一次发送消息,对方能正常接收并显示,当第二次发送消息对方接收到消息后,也能显示,但接着程序就出错,按“调试”按钮后就进入一个汇编代码文件,按F5往下运行就弹出“无效的句柄”对话框。我现在不知该如何对release版本进行调试,只猜测问题可能出在以下函数中的ReceiveFrom():UINTCUUClientDlg::ChatRecvListening(LPVOIDpParam)//等待接收对方消息的多线程处理函数{CUUClientDlg*pDlg=(CUUClientDlg*)(AfxGetApp()-m_pMainWnd);CChatSocket*pSock=newCChatSocket(pDlg);SOCKET*phSocket=(SOCKET*)pParam;CStringstr;pSock-Attach(*phSocket);intlen;while(1){len=pSock-ReceiveFrom(&buf,sizeof(buf),strIP,nPort,0);if(len==SOCKET_ERROR){interror;error=pSock-GetLastError();returnFALSE;}::SendMessage(pDlg-GetSafeHwnd(),WM_RECV_CHATMSG,0,0);}returnTRUE;}有无特殊的设置检查下和Debug版有何不同咯::SendMessage()改成PostMessage()试下。终于找到原因,原来是自定义消息的问题。自定义消息的消息参数。MFC为我们提供了很好的消息机制,更增加了自定义消息,好处我就不用多说了。这也存在debug跟release的问题吗?答案是肯定的。在自定义消息的函数体声明时,时常会看到这样的写法:afx_msgLRESULTOnMessageOwn();Debug情况下一般不会有任何问题,而当你在Release下且多线程或进程间使用了消息传递时就会导致无效句柄之类的错误。导致这个错误直接原因是消息体的参数没有添加,即应该写成:afx_msgLRESULTOnMessageOwn(WPARAMwparam,LPARAMlparam);非常感谢这篇文章的解析我晕,你定义消息响应函数都不带参数。。。。强。。。。。别晕~~毕竟,我是第一次使用自定义消息,我以为只要格式对了,就可以了,怎么连参数也一定要带呢,尽管我的响应函数不需要参数。MARKTags:,release,VC/MFC,版本[VC2008][生成][Release]VC2008生成Release版本选择优化选项后居然把我整个函数给跳过了-VC/MFC/进程/线程/DLL09月11th,2010byadminPostedinVC/MFC|NoComments»我有一个函数,不是内联的。在打开编译优化选项后,居然整个函数给我跳过了。。。我用MessageBox放在这个函数内部作测试的,Debug版本下正常,到了Release版怎么也进不了这个函数,生成调试信息后单步跟踪发现直接就跳过去了。对话框也没跳出来。禁用编译优化选项后一切正常了,这种问题怎么回事?是不是你的函数没什么用处啊?比如voidmyfun(){inta=10;}这样可能被优化掉代码里怎么写的呢?如果是没用的函数,就是会被优化掉。不如你检查一下那个地方的代码吧,是不是有判断条件啊什么的有问题。那应该是编译器认为你要调用的函数需要优化,而优化之后也有可能把这部分代码给隔离掉,区分优化和不优化的代码。所以它不进来?我只是个人观点,你可以去google下。如果始终在那里跳过,但你的程序运行仍然正常的话,是不是可以说明在该处调用这个函数无意义呢?我还仔细检查过函数内部的判断条件,没有哪种情况它不应该执行的你先把Debug目录清空删除,再重新编译Debug版,看看是不是还正常???不对,看错了,现在Debug版本错误更多。。。。禁用优化以后又正常了诡异。。。换个编译器试试吧函数没有输出,当然会被优化掉。这个可能要抠具体的优化选项了权宜之计是针对这一部分代码禁用优化就冲你这态度,你解决不了这个问题,就算侥幸绕过这个问题,你早晚还会栽在上面。Tags:,release,vc2008,生成[release][调试][VC/MFC]release能调试吗-VC/MFC/基础类08月30th,2010byadminPostedinVC/MFC|NoComments»我在公司看见有人写的代码全是在release下调试的,debug下全部是异常,程序直接崩溃,然后他们问我干嘛要用debug,我无言以对了,他们拷贝字符串都是这样的:voidcopystr(char*pIn){intlen=strlen(pIn);char*p=newchar[len];strcpy(p,pIn);}呵呵,我们公司因为工程大,好多人都是release带DEbug信息调试编码的。不我还建议用debug比较好,因为Release回忽略掉一些小问题的。你才crash的时候点击“重试”,看一下callstack把这些问题一一修正给他们弄一个debug环境。如果你公司的人来我这里应聘程序员,我会让他们统统去扫厕所。voidcopystr(char*pIn){intlen=strlen(pIn);char*p=newchar[len];strcpy(p,pIn);}这个函数也能用吗晕,路过release可以调试是不假不过不建议使用除非迫不得已因为确实有些问题bug下调不出来release状态下可以调试的release和debug只是编译参数不同而已,你也可以命名自己的编译设置具体设置参考:———————————————————————————能调试,但是个别变量可能无法对应,有些只能看内存release调试有时候鼠标放那,看不到结果。基本debug调。release走一遍主要是我改成DEBUG运行不了,全是runtimeerror,不能执行,他们叫我直接忽略最最无奈的是100多个工程全是这样的,而且那几个写代码的人同时辞职了你们公司的人的态度真另人受不了无语!有些大部分是没有经过专门学习的半路程序员,只求功能实现,其他代码规范,一律不管,我见得不少,如果你们想知道更牛逼的,我知道在一个正规的项目中有一个这样的类命名:intn1,n2,nxxx,xxx到200多变量intj1,j2jxxx,xxx到100多,下面还用这些变量,完全是小学生作业;我看了全删了重写的命名变量release都有优化怎么调试?建议Release使用LOG来“调试”LINK:fatalerrorLNK1181:cannotopeninputfile;/out:Release/Chinese.exe试着用Release来调试,但提示这个错误,是怎么回事?Tags:,release,VC/MFC,调试[release][调试][VC/MFC]release能调试吗-VC/MFC/基础类08月29th,2010byadminPostedinVC/MFC|NoComments»我在公司看见有人写的代码全是在release下调试的,debug下全部是异常,程序直接崩溃,然后他们问我干嘛要用debug,我无言以对了,他们拷贝字符串都是这样的:voidcopystr(char*pIn){intlen=strlen(pIn);char*p=newchar[len];strcpy(p,pIn);}呵呵,我们公司因为工程大,好多人都是release带DEbug信息调试编码的。不我还建议用debug比较好,因为Release回忽略掉一些小问题的。你才crash的时候点击“重试”,看一下callstack把这些问题一一修正给他们弄一个debug环境。如果你公司的人来我这里应聘程序员,我会让他们统统去扫厕所。voidcopystr(char*pIn){intlen=strlen(pIn);char*p=newchar[len];strcpy(p,pIn);}这个函数也能用吗晕,路过release可以调试是不假不过不建议使用除非迫不得已因为确实有些问题bug下调不出来release状态下可以调试的release和debug只是编译参数不同而已,你也可以命名自己的编译设置具体设置参考:———————————————————————————能调试,但是个别变量可能无法对应,有些只能看内存release调试有时候鼠标放那,看不到结果。基本debug调。release走一遍主要是我改成DEBUG运行不了,全是runtimeerror,不能执行,他们叫我直接忽略最最无奈的是100多个工程全是这样的,而且那几个写代码的人同时辞职了你们公司的人的态度真另人受不了无语!有些大部分是没有经过专门学习的半路程序员,只求功能实现,其他代码规范,一律不管,我见得不少,如果你们想知道更牛逼的,我知道在一个正规的项目中有一个这样的类命名:intn1,n2,nxxx,xxx到200多变量intj1,j2jxxx,xxx到100多,下面还用这些变量,完全是小学生作业;我看了全删了重写的命名变量release都有优化怎么调试?建议Releas

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功