*o* Releas版本出现非法操作,没法调试,痛苦 在线等待 *o*

时间:2022-02-13 19:59:22
一个程序使用CAsyncSocket类进行局域网通信,Cilent端.设计成连接时在OnConnect
函数检测到nErrorCode不为0(连接失败)时就向主框架发送一个自定义消息,如下:

AfxGetApp()->m_pMainWnd->PostMessage(消息,0,0);

主框架接收到该消息后调用一个函数进行处理,在这个函数里先Close()掉Sochet
结构,然后重新Create()和Connect(...),这样只要连接不成功就会一直试图连接
下去直到成功,但是在Relaese版本中一旦这个循环开始启动,之后无论是程序失去
焦点,或是单击程序窗体,甚至鼠标划过菜单时菜单项浮动一下都会非法,又试验如
下操作:
   程序运行到一定时间向程序发送WM_CLOSE消息,Release版本也会非法,好像它
接收到任何除了自定义消息之外的消息都会非法
   但这些现象在Debug版本中就完全没有出现过
   另外如果响应自定义消息的函数仅仅Close()而不重新连接,既对连接失败做一
定处理但不重新连接的话Release版本也不非法
   拜托大家帮帮忙,不一定是针对问题本身,认为有价值的建议想法都请告知,我用
Debug版本都半年多了,如能解脱,不胜感激.

7 个解决方案

#1


在release版中使用CSocket在线程中传送消息肯定会有问题

#2


可能是你的那个处理消息的函数有问题
正确的应该是
LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)
{
  ...
  return 0;
}

#3


gz

#4


zzhcom(zzhcom) 说得很有可能。
Release下也是可以看到调试信息的,你可以在Release的Project Settings中这样设置:
C/C++页:“Debug Info”项选“Program DataBase”;
Link页:将Generate debug info选项钩上;
然后Rebuild All 一下Release代码,就能在调试中看到Release版本出错的地方了。(这样显示可能有些误差,一般在提示点的上下两行)。

#5


In355Hz,你说的办法一定不错,俺要去试试,我也遇到这个问题。。。
不过之前我就是把DEBUG的编译开关调整得和RELEASE差不多,这样倒不会非法操作了。

#6


问题解决,发分,发分

非常感谢zzhcom(zzhcom);同样要感谢In355Hz,受教了

你们二位是怎么知道这些的,希望能有幸交流:

yunbianhuo@sina.com

#7


你可以使用TerminateProcess()代替发送WM_CLOSE消息结束进程的运行,我一个朋友碰到的问题和你的相似,它也是在Release版中发送WM_CLOSE消息时出现了错误,你可以按照In355Hz说的方法调试一下,问题很可能处在这个消息上。

#1


在release版中使用CSocket在线程中传送消息肯定会有问题

#2


可能是你的那个处理消息的函数有问题
正确的应该是
LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)
{
  ...
  return 0;
}

#3


gz

#4


zzhcom(zzhcom) 说得很有可能。
Release下也是可以看到调试信息的,你可以在Release的Project Settings中这样设置:
C/C++页:“Debug Info”项选“Program DataBase”;
Link页:将Generate debug info选项钩上;
然后Rebuild All 一下Release代码,就能在调试中看到Release版本出错的地方了。(这样显示可能有些误差,一般在提示点的上下两行)。

#5


In355Hz,你说的办法一定不错,俺要去试试,我也遇到这个问题。。。
不过之前我就是把DEBUG的编译开关调整得和RELEASE差不多,这样倒不会非法操作了。

#6


问题解决,发分,发分

非常感谢zzhcom(zzhcom);同样要感谢In355Hz,受教了

你们二位是怎么知道这些的,希望能有幸交流:

yunbianhuo@sina.com

#7


你可以使用TerminateProcess()代替发送WM_CLOSE消息结束进程的运行,我一个朋友碰到的问题和你的相似,它也是在Release版中发送WM_CLOSE消息时出现了错误,你可以按照In355Hz说的方法调试一下,问题很可能处在这个消息上。