关于DEBUG和RELEASE的一些问题及解决方法.docx
《关于DEBUG和RELEASE的一些问题及解决方法.docx》由会员分享,可在线阅读,更多相关《关于DEBUG和RELEASE的一些问题及解决方法.docx(17页珍藏版)》请在冰豆网上搜索。
关于DEBUG和RELEASE的一些问题及解决方法
[release][版本][调试]release版本下调试正常运行exe出错-VC/MFC/基础类
10月9th,2010byadmin
PostedinVC/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,2010byadmin
PostedinVC/MFC|NoComments»
本人的聊天程序在debug的版本下可以顺利发送和接收对方聊天消息,但是在release版本下却出现了严重问题,症状如下:
第一次发送消息,对方能正常接收并显示,当第二次发送消息对方接收到消息后,也能显示,但接着程序就出错,按“调试”按钮后就进入一个汇编代码文件,按F5往下运行就弹出“无效的句柄”对话框。
我现在不知该如何对release版本进行调试,只猜测问题可能出在以下函数中的ReceiveFrom():
UINT CUUClientDlg:
:
ChatRecvListening(LPVOID pParam)//等待接收对方消息的多线程处理函数
{
CUUClientDlg* pDlg=(CUUClientDlg*)(AfxGetApp()->m_pMainWnd);
CChatSocket* pSock=new CChatSocket(pDlg);
SOCKET* phSocket =(SOCKET *)pParam;
CString str;
pSock->Attach(*phSocket);
int len;
while
(1)
{
len=pSock->ReceiveFrom(&buf,sizeof(buf),strIP,nPort,0);
if(len==SOCKET_ERROR)
{
int error;
error=pSock->GetLastError();
return FALSE;
}
:
:
SendMessage(pDlg->GetSafeHwnd(),WM_RECV_CHATMSG,0,0);
}
return TRUE;
}有无特殊的设置
检查下和Debug版有何不同咯:
:
SendMessage()改成PostMessage()试下。
终于找到原因,原来是自定义消息的问题。
自定义消息的消息参数。
MFC为我们提供了很好的消息机制,更增加了自定义消息,好处我就不用多说了。
这也存在debug跟release的问题吗?
答案是肯定的。
在自定义消息的函数体声明时,时常会看到这样的写法:
afx_msg LRESULT OnMessageOwn(); Debug情况下一般不会有任何问题,而当你在Release下且多线程或进程间使用了消息传递时就会导致无效句柄之类的错误。
导致这个错误直接原因是消息体的参数没有添加,即应该写成:
afx_msg LRESULT OnMessageOwn(WPARAM wparam, LPARAM lparam);
非常感谢这篇文章的解析
Tags:
release,VC/MFC,版本
[VC2008][生成][Release]VC2008生成Release版本选择优化选项后居然把我整个函数给跳过了-VC/MFC/进程/线程/DLL
09月11th,2010byadmin
PostedinVC/MFC|NoComments»
我有一个函数,不是内联的。
在打开编译优化选项后,居然整个函数给我跳过了。
。
。
我用MessageBox放在这个函数内部作测试的,Debug版本下正常,到了Release版怎么也进不了这个函数,生成调试信息后单步跟踪发现直接就跳过去了。
对话框也没跳出来。
禁用编译优化选项后一切正常了,这种问题怎么回事?
是不是你的函数没什么用处啊?
比如voidmyfun(){inta=10;}
这样可能被优化掉代码里怎么写的呢?
<
<
如果是没用的函数,就是会被优化掉。
不如你检查一下那个地方的代码吧,是不是有判断条件啊什么的有问题。
那应该是编译器认为你要调用的函数需要优化,而优化之后也有可能把这部分代码给隔离掉,区分优化和不优化的代码。
所以它不进来?
我只是个人观点,你可以去google下。
如果始终在那里跳过,但你的程序运行仍然正常的话,是不是可以说明在该处调用这个函数无意义呢?
<
我还仔细检查过函数内部的判断条件,没有哪种情况它不应该执行的
你先把Debug目录清空删除,再重新编译Debug版,看看是不是还正常?
?
?
<
不对,看错了,现在Debug版本错误更多。
。
。
。
禁用优化以后又正常了诡异。
。
。
换个编译器试试吧函数没有输出,当然会被优化掉。
<
<
这个可能要抠具体的优化选项了权宜之计是针对这一部分代码禁用优化<
<
就冲你这态度,你解决不了这个问题,就算侥幸绕过这个问题,你早晚还会栽在上面。
Tags:
release,vc2008,生成
[release][调试][VC/MFC]release能调试吗-VC/MFC/基础类
08月30th,2010byadmin
PostedinVC/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,2010byadmin
PostedinVC/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月27th,2010byadmin
PostedinVC/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][生成][执行]release下生成的可执行程序在其它机器上不能运行-VC/MFC/基础类
07月15th,2010byadmin
PostedinVC/MFC|NoComments»
如题,在同事的机器上也可以运行,就是拿到会议室的机器上就不能运行了。
属性我也改成的是“在静态库中使用MFC”。
现在也不知道问题在哪里,有经验的给给思路。
谢谢。
不能运行,有提示少库是mfc问题,没提示是程序问题,或少了什么文件吧你确定是Release版本?
你确定两台计算机是同样的操作系统?
这种常见情况一般都是没有在目标机器上安装过“可发行组件”,又叫“重分发包”,IDE基本都高于vc6.请注册ocx控件,等用depends看看他的依赖库是否有。
。
然后把相应的依赖库拷贝到目标机器上。
如果是COM的依赖库还需要注册一下!
!
!
!
报什么错查下依赖库,看看都引用了那些Dll文件为什么老有人问这个问题,难道大家都不会用搜索引擎?
dependencyWalk工具看看使用了哪些dll可能因为会议室的机器上没有安装相应的软件(如vc),所有就找不到相应的动态库,用vc的depends工具打开.exe文件查看与.exe文件存在依赖关系的动态库有哪些,在自己电脑上找到这些动态库,然后拷贝到.exe所在目录下,之后重新打包系统。
用exescope或者dependency看一下依赖哪些dll这种问题我一般是看少了什么dll,然后自己去网上下就完了
Tags:
release,执行,生成
[VC/MFC][Release][菜单]VC/MFCRelease下的菜单图标不显示问题Debug下正常-VC/MFC/基础类
07月15th,2010byadmin
PostedinVC/MFC|NoComments»
如题,Release下程序菜单中的图标为什么都不显示了呢,Bitmap格式的,在Debug下正常显示啊,工具栏上的图标两种环境下都正常显示
请问是怎么回事,又该怎么处理呢?
以前碰到相关结构体没初始化会出现这样问题,DEBUG没问题,release就没反应。
不晓得是不是这方面原因。
<
你跟踪图标id,debug下我在为菜单创建图标的代码是这样的:
在MainFrame的OnCreat(…)函数中,
{
…
CBitmapm_BitStart;
m_BitStart.LoadBitmap(IDB_BITMAP_START);//IDB_BITMAP_START为我新建的位图资源
CMenu*subMenu=this->GetMenu()->GetSubMenu(4);
ASSERT(subMenu->SetMenuItemBitmaps(ID_START_SIMULATION,MF_BYCOMMAN,
&m_BitStart,&m_BitStart));
…//其他菜单图标也都是这样处理的
}
。
。
。
不知道是不是还要在其他地方设置什么,才能在Release下正常显示菜单图标?
<
CBitmapm_BitStart;
=============
局部变量,函数结束后析构之后,相关的位图对象也被释放了,解决方法有如下几种:
一:
改为CBitmap*m_BitStart;
二:
在最后调用m_BitStart.Detach(),将类对象与GDI对象分离
三:
将CBitmap定义为静态变量或是类成员变量
Release直接跳过了。
。
。
<
Tags:
release,VC/MFC,菜单
[RELEASE][debug][VC/MFC]RELEASE调debug-VC/MFC/基础类
07月7th,2010byadmin
PostedinVC/MFC|NoComments»
我release的activex能不能调人家debug库?
库是第三方的,debug,
我的控件在debug下运行不起来
如需要阅读该回复,请登录或注册
讲详细点呢?
该怎么弄?
当然可以调
一般不会出问题顶,学习学习!
谢谢各位
Tags:
debug,release,VC/MFC
[Release][下用][绘画]Release下用DC绘画问题
04月3rd,2010byadmin
PostedinVC/MFC|NoComments»
用DC绘图时在DEBUG下正常但在Release下绘制的图只能显示一半代码
.贴代码!
!
!
!
!
!
!
UINTdraw(LPVOIDpParam)
{
Draw_Par*drawpar=(Draw_Par*)pParam;
while
(1)
{
Sleep(50);
if(drawpar->filename=="")
{
Thread_Map->SuspendThread();
continue;
}
Map_Mutex.Lock();
MAZE*room=newMAZE;
intlength,Left_Length,Right_Length,start_x,start_y;
filehead=GetMazeHead(drawpar->filename);
length=drawpar->Length;
Left_Length=drawpar->Left_Length;
Right_Length=drawpar->Right_Length;
start_x=drawpar->Start_x;
start_y=drawpar->Start_y;
CRectrect(0,0,drawpar->rect.Width(),drawpar->rect.Height());
CBrushbrush;
brush.CreateSolidBrush(drawpar->background);
dcMemory.Rectangle(&rect);
dcMemory.FillRect(&rect,&brush);
CPenaxisPen;//坐标轴用的画笔
axisPen.CreatePen(PS_SOLID,0,drawpar->map);
dcMemory.SelectObject(&axisPen);
intj=0;
for(intm=drawpar->Start_num_x;m<=drawpar->End_num_x;m++)
{
for(j=drawpar->Start_num_y;j<=drawpar->End_num_y;j++)
{
*room=GetHouse(m,j,drawpar->filename);
if