2023年11月29日发(作者:)

[release][版本][调试]release版本下调试正常运

exe出错 - VC/MFC / 基础类

10 9th, 2010 by admin

Posted in VC/MFC | No Comments »

我做的一个调用dll的程序,在debug下调试和运行exe都正常

release下调试也正常,但是直接运行release下的exe就会挂掉,请高人指

点一下,到底是什么原因。

程序中有调用外部工具执行解压和压缩,因为没有使用多线程,在解压缩的时候

会使主框架无响应,在这样的状态下进入调用dll的模块,然后程序执行一半就

挂掉了,是不是和解压缩有关呢 ?

不会是跟路径有关吧?程序中使用的相对路径???跟路径无关,都是相对路径

而且release下调试是通过的,能正常运行得出结果

但是,直接执行release下的exe文件就挂掉了,很奇怪运行就挂掉是指,没有

响应?程序崩溃?程序直接消失?

没有响应的话,是某个地方阻塞掉了,可以根据程序流程来跟踪,看执行到哪里才

没响应的.

程序崩溃的话,看看提示是什么,再跟踪程序流程.

程序直接消失的话,多半是栈溢出了.挂掉的时候attach process一下,再查看

堆栈,可以定位出在哪个函数挂掉了。<

<

很可能就是路径的问题

release调试的时候,可以设置工作目录,其他相对路径都是基于这个工作目录

release运行的时候,工作目录应该是其所在的文件夹用几个messagebox调试

的看看一定是路径问题!把dll放到release一份看看。把dll放到release

目录下,再直接运行exe文件试试.- - 路径不正确吧。 一些指针变量未初始

化??

字节对齐方式不对??在PostMessage或者在SendMessage处查看,我也碰到这

问题,就是这么解决的.

80%是相对路径 ,改成绝对路径试试

有没有考虑过权限的问题,调试的时候程序是有DEBUG权限的,直接运行是没有

这么高的权限+看下库依赖问题 depends<

顶一个!<

Tags: , release, 版本, 调试

[release][版本][VC/MFC]急!~~release版本出现

问题 - VC/MFC / 基础类

09 17th, 2010 by admin

Posted in VC/MFC | No Comments »

本人的聊天程序在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为我们提供了很好的消息机制,更增加了自定义消息,好处我就不用多说

了。这也存在debugrelease的问题吗?答案是肯定的。在自定义消息 的函

数体声明时,时常会看到这样的写法:

afx_msg LRESULT OnMessageOwn(); Debug情况下一般不会有任何问题,

而当你在Release下且多线程或进程间使用了消息传递时就会导致无效句柄之

类的错误。导致这个错误直接原因是消 息体的参数没有添加,即应该写成:

afx_msg LRESULT OnMessageOwn(WPARAM wparam, LPARAM lparam);

非常感谢这篇文章的解析

/article/17/我晕,你定义消息响应函数都不

带参数。。。。强。。。。。别晕~~毕竟,我是第一次使用自定义消息,我以为

只要格式对了,就可以了,怎么连参数也一定要带呢,尽管我的响应函数不需要

参数。MARK

Tags: , release, VC/MFC, 版本

[VC2008][生成][Release]VC2008生成Release版本

选择优化选项后居然把我整个函数给跳过了 -

VC/MFC / 进程/线程/DLL

09 11th, 2010 by admin

Posted in VC/MFC | No Comments »

我有一个函数,不是内联的。在打开编译优化选项后,居然整个函数给我跳过

了。。。我用MessageBox放在这个函数内部作测试的,Debug 本下正常,到

Release版怎么也进不了这个函数,生成调试信息后单步跟踪发现直接就跳过

去了。对话框也没跳出来。禁用编译优化选项后一切正常了,这 种问题怎么回

事?是不是你的函数没什么用处啊?

比如 void myfun(){ int a=10;}

这样可能被优化掉代码里怎么写的呢?<

<

如果是没用的函数,就是会被优化掉。

不如你检查一下那个地方的代码吧,是不是有判断条件啊什么的有问题。那应该

是编译器认为你要调用的函数需要优化,而优化之后也有可能把这部分代码给隔

离掉,区分优化和不优化的代码。所以它不进来?我只是个人观点,你可以去

google下。如果始终在那里跳过,但你的程序运行仍然正常的话,是不是可以

说明在该处调用这个函数无意义呢?<

我还仔细检查过函数内部的判断条件,没有哪种情况它不应该执行的

你先把Debug目录清空删除,再重新编译Debug版,看看是不是还正常???

<

不对,看错了,现在Debug版本错误更多。禁用优化以后又正常了诡异。

换个编译器试试吧函数没有输出,当然会被优化掉。

<

<

这个可能要抠具体的优化选项了 权宜之计是针对这一部分代码禁用优化 <

<

就冲你这态度,你解决不了这个问题,就算侥幸绕过这个问题, 你早晚还会栽

在上面。

Tags: , release, vc2008, 生成

[release][调试][VC/MFC]release 能调试吗 -

VC/MFC / 基础类

08 30th, 2010 by admin

Posted in VC/MFC | No Comments »

我在公司看见有人写的代码全是在release下调试的,debug下全部是异常,程

序直接崩溃,然后他们问我干嘛要用debug,我无言以对了,他们拷贝字符串都

是这样的:

void copystr(char * pIn)

{

int len = strlen(pIn);

char * p = new char[len];

strcpy(p,pIn);

}呵呵,我们公司因为工程大,好多人都是releaseDEbug信息调试编码的。

不我还建议用debug比较好,因为Release回忽略掉一些小问题的。

你才crash的时候点击“重试”,看一下callstack把这些问题一一修正给他们

弄一个debug环境。如果你公司的人来我这里应聘程序员,我会让他们统统去扫

厕所。

void copystr(char * pIn)

{

int len = strlen(pIn);

char * p = new char[len];

strcpy(p,pIn);

}

这个函数也能用吗晕,路过release可以调试是不假

不过不建议使用

除非迫不得已

因为确实有些问题bug下调不出来release状态下可以调试的

releasedebug只是编译参数不同而已,你也可以命名自己的编译设置

具体设置参

:/baicker/archive/2007/08/29/

———————————————————————————

<

能调试,但是个别变量可能无法对应,有些只能看内存<

<

release 调试有时候鼠标放那,看不到结果。

基本debug调。release走一遍主要是我改成DEBUG运行不了,全是runtime

error,不能执行,他们叫我直接忽略最最无奈的是100多个工程全是这样的,

而且那几个写代码的人同时辞职了你们公司的人的态度真另人受不了<

<

无语!有些大部分是没有经过专门学习的半路程序员,只求功能实现,其他代码

规范,一律不管,我见得不少,如果你们想知道更牛逼的,我知道在一个正规的

项目中有一个这样的类命名:

int n1,n2,nxxxxxx200多变量

int j1,j2 jxxx,xxx100多,

下面还用这些变量,完全是小学生作业;

我看了全删了重写的命名变量<

release 都有优化怎么调试 ?建议 Release 使用LOG来“调试”LINK :

fatal error LNK1181: cannot open input file "/out:Release/"

试着用Release来调试,但提示这个错误,是怎么回事?

Tags: , release, VC/MFC, 调试

[release][调试][VC/MFC]release 能调试吗 -

VC/MFC / 基础类

08 29th, 2010 by admin

Posted in VC/MFC | No Comments »

我在公司看见有人写的代码全是在release下调试的,debug下全部是异常,程

序直接崩溃,然后他们问我干嘛要用debug,我无言以对了,他们拷贝字符串都

是这样的:

void copystr(char * pIn)

{

int len = strlen(pIn);

char * p = new char[len];

strcpy(p,pIn);

}呵呵,我们公司因为工程大,好多人都是releaseDEbug信息调试编码的。

不我还建议用debug比较好,因为Release回忽略掉一些小问题的。

你才crash的时候点击“重试”,看一下callstack把这些问题一一修正给他们

弄一个debug环境。如果你公司的人来我这里应聘程序员,我会让他们统统去扫

厕所。

void copystr(char * pIn)

{

int len = strlen(pIn);

char * p = new char[len];

strcpy(p,pIn);

}

这个函数也能用吗晕,路过release可以调试是不假

不过不建议使用

除非迫不得已

因为确实有些问题bug下调不出来release状态下可以调试的

releasedebug只是编译参数不同而已,你也可以命名自己的编译设置

具体设置参

:/baicker/archive/2007/08/29/

———————————————————————————

<

能调试,但是个别变量可能无法对应,有些只能看内存<

<

release 调试有时候鼠标放那,看不到结果。

基本debug调。release走一遍主要是我改成DEBUG运行不了,全是runtime

error,不能执行,他们叫我直接忽略最最无奈的是100多个工程全是这样的,

而且那几个写代码的人同时辞职了你们公司的人的态度真另人受不了<

<

无语!有些大部分是没有经过专门学习的半路程序员,只求功能实现,其他代码

规范,一律不管,我见得不少,如果你们想知道更牛逼的,我知道在一个正规的

项目中有一个这样的类命名:

int n1,n2,nxxxxxx200多变量

int j1,j2 jxxx,xxx100多,

下面还用这些变量,完全是小学生作业;

我看了全删了重写的命名变量<

release 都有优化怎么调试 ?建议 Release 使用LOG来“调试”LINK :

fatal error LNK1181: cannot open input file "/out:Release/"

试着用Release来调试,但提示这个错误,是怎么回事?

Tags: , release, VC/MFC, 调试

[release][调试][VC/MFC]release 能调试吗 -

VC/MFC / 基础类

08 27th, 2010 by admin

Posted in VC/MFC | No Comments »

我在公司看见有人写的代码全是在release下调试的,debug下全部是异常,程

序直接崩溃,然后他们问我干嘛要用debug,我无言以对了,他们拷贝字符串都

是这样的:

void copystr(char * pIn)

{

int len = strlen(pIn);

char * p = new char[len];

strcpy(p,pIn);

}呵呵,我们公司因为工程大,好多人都是releaseDEbug信息调试编码的。

不我还建议用debug比较好,因为Release回忽略掉一些小问题的。

你才crash的时候点击“重试”,看一下callstack把这些问题一一修正给他们

弄一个debug环境。如果你公司的人来我这里应聘程序员,我会让他们统统去扫

厕所。

void copystr(char * pIn)

{

int len = strlen(pIn);

char * p = new char[len];

strcpy(p,pIn);

}

这个函数也能用吗晕,路过release可以调试是不假

不过不建议使用

除非迫不得已

因为确实有些问题bug下调不出来release状态下可以调试的

releasedebug只是编译参数不同而已,你也可以命名自己的编译设置

具体设置参

:/baicker/archive/2007/08/29/

———————————————————————————

<

能调试,但是个别变量可能无法对应,有些只能看内存<

<

release 调试有时候鼠标放那,看不到结果。

基本debug调。release走一遍主要是我改成DEBUG运行不了,全是runtime

error,不能执行,他们叫我直接忽略最最无奈的是100多个工程全是这样的,

而且那几个写代码的人同时辞职了你们公司的人的态度真另人受不了<

<

无语!有些大部分是没有经过专门学习的半路程序员,只求功能实现,其他代码

规范,一律不管,我见得不少,如果你们想知道更牛逼的,我知道在一个正规的

项目中有一个这样的类命名:

int n1,n2,nxxxxxx200多变量

int j1,j2 jxxx,xxx100多,

下面还用这些变量,完全是小学生作业;

我看了全删了重写的命名变量<

release 都有优化怎么调试 ?建议 Release 使用LOG来“调试”LINK :

fatal error LNK1181: cannot open input file "/out:Release/"

试着用Release来调试,但提示这个错误,是怎么回事?

Tags: , release, VC/MFC, 调试

[release][生成][执行]release下生成的可执行程

序在其它机器上不能运行 - VC/MFC / 基础类

07 15th, 2010 by admin

Posted in VC/MFC | No Comments »

如题,在同事的机器上也可以运行,就是拿到会议室的机器上就不能运行了。

性我也改成的是“在静态库中使用 MFC”。

现在也不知道问题在哪里,有经验的给给思路。谢谢。不能运行,有提示少库是

mfc问题,没提示是程序问题,或少了什么文件吧你确定是Release版本?

你确定两台计算机是同样的操作系统?

这种常见情况 一般 都是没有在目标机器上安装过 “可发行组件”, 又叫

“重分发包”, IDE基本都高于vc6.请注册ocx控件,等用depends 看看他的

依赖库是否有。然后把相应的依赖库拷贝到目标机器上。如果是COM的依赖库

还需要注册一下!!!!报什么错查下依赖库, 看看都引用了那些Dll文件为

什么老有人问这个问题,难道大家都不会用搜索引擎?dependency Walk工具看

看使用了哪些dll可能因为会议室的机器上没有安装相应的软件(如vc),所

有就找不到相应的动态库,vcdepends工具打开.exe文件查看与.exe文件

存在依赖关系的动态库有哪些,在自己电脑上找到这些动态库,然后拷贝到.exe

所在目录下,之后重新打包系统。exescope或者dependency看一下依赖哪些

dll 这种问题我一般是看少了什么dll,然后自己去网上下就完了

Tags: , release, 执行, 生成

[VC/MFC][Release][菜单]VC/MFC Release下的菜单

图标不显示问题Debug下正常 - VC/MFC / 基础类

07 15th, 2010 by admin

Posted in VC/MFC | No Comments »

如题,Release下程序菜单中的图标为什么都不显示了呢,Bitmap格式的,

Debug下正常显示啊,工具栏上的图标两种环境下都正常显示

请问是怎么回事,又该怎么处理呢?以前碰到 相关结构体没初始化 会出现这样

问题,DEBUG 没问题,release就没反应。不晓得是不是这方面原因。<

你跟踪图标iddebug下我在为菜单创建图标的代码是这样的:

MainFrameOnCreat(„)函数中,

{

CBitmap m_BitStart;

m_tmap(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 正常显示菜

单图标?

<

CBitmap m_BitStart;

=============

局部变量,函数结束后析构之后,相关的位图对象也被释放了,解决方法有如下

几种:

一:改为CBitmap *m_BitStart;

二:在最后调用m_(),将类对象与GDI对象分离

三:将CBitmap定义为静态变量或是类成员变量

Release直接跳过了。。。<

Tags: , release, VC/MFC, 菜单

[RELEASE][debug][VC/MFC]RELEASEdebug -

VC/MFC / 基础类

07 7th, 2010 by admin

Posted in VC/MFC | No Comments »

releaseactivex能不能调人家debug?库是第三方的,debug

我的控件在debug下运行不起来

如需要阅读该回复,请登录注册

讲详细点呢?该怎么弄?当然可以调

一般不会出问题顶,学习学习!谢谢各位

Tags: , debug, release, VC/MFC

[Release][下用][绘画]Release 下用DC绘画问题

04 3rd, 2010 by admin

Posted in VC/MFC | No Comments »

DC绘图时在DEBUG下正常但在Release下绘制的图只能显示一半代码

.贴代码!!!!!!!UINT draw(LPVOID pParam)

{

Draw_Par *drawpar=(Draw_Par *)pParam;

while(1)

{

Sleep(50);

if(drawpar->filename == "")

{

Thread_Map->SuspendThread();

continue;

}

Map_();

MAZE *room = new MAZE;

int length,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;

CRect rect(0,0,drawpar->(),drawpar->());

if(room->right == 1)

{

(Left_Length+(room->x-start_x+1)*length,Right_Length+(

room->y-start_y)*length);

(Left_Length+(room->x-start_x+1)*length,Right_Length+(

room->y-start_y+1)*length);

}

if(room->down == 1)

{

(Left_Length+(room->x-start_x)*length,Right_Length+(ro