如何捕获这样的异常 0x73d311c7 指令引用的 0x000004f9 内存 该内存不能为read对于这样的异常,用什么来捕获请给具体实现谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 指针越界了吧Debug下call stack看函数调用堆栈~ 直接调试更快些在try块里写可能会出异常的代码 __try { }__except(1) { }用SEH 关键是,在DEBUG下没有一点问题,或许是DEBUG下,没有出现然后,在release下就出现。。不知道怎么调试。虽然可以在RELEASE下调试但是,我这个情况有点特殊我把相关代码贴下:有个C/S模式的监控系统,服务端对客户端进行监控在客户端:CMyApp::InitInstance(){ //省略。。 pMainFrame = new CMainFrame; if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) return FALSE; m_pMainWnd = pMainFrame;//pMainFrame为CMyApp的成员 pMainFrame->Listen();//在主框架中进行侦听,以便接受服务端的消息 .... .... return TRUE;}CMainFrame::Listen(){ //获取本机IP hostent* phost = gethostbyname(""); char* localIP = inet_ntoa (*(struct in_addr *)*phost->h_addr_list); sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_addr.S_un.S_addr = inet_addr(localIP); addr.sin_port = htons(5001); //创建套接字 m_Socket = socket(AF_INET,SOCK_DGRAM,0); if (m_Socket == INVALID_SOCKET) { MessageBox("套接字创建失败!"); return; } char* len = "512"; if (setsockopt(m_Socket,SOL_SOCKET,SO_SNDBUF,len,4)!= 0) { MessageBox("设置失败!"); return; } //绑定套接字 if (bind(m_Socket,(sockaddr*)&addr,sizeof(addr))==SOCKET_ERROR) { DWORD dwError=::GetLastError(); return; } WSAAsyncSelect(m_Socket,this->m_hWnd,CM_RECEIVED,FD_READ); m_Confirm = TRUE; pSendBuf = new char[2048*2048*2]; pHeader = pSendBuf; m_FrameIndex=0; count=0; m_Received = FALSE; m_Counter = 0; }void CMainFrame::OnReceived(){ char* pData = new char[1024]; memset(pData,0,1024); sockaddr_in addr; int factsize =sizeof(sockaddr); int ret = recvfrom(m_Socket,pData,1024,0,(sockaddr*)&addr,&factsize); if (ret != -1) { if(ret==3) { m_ServerIP=inet_ntoa(addr.sin_addr); addr1.sin_addr.S_un.S_addr=inet_addr(m_ServerIP); m_Received = TRUE; GetDeskMAP(); } else if (ret==8) { m_Received = TRUE; m_FrameIndex +=1; if (m_FrameIndex<count) SendData(m_FrameIndex,mod,bmpsize,count,pSendBuf,addr1); else GetDeskMAP(); } } delete []pData; }==================================================附注:在int ret = recvfrom(m_Socket,pData,1024,0,(sockaddr*)&addr,&factsize);全部被注释后,如果recvfrom这行,不注释,就有同样的问题。如果注释了,就没有问题==================== 没看出什么特殊的啊生成pdb符号文件后,就可以release调试了 不好跟踪到OnRecv()中比如,我在OnRecv中设置一个断点,然后一步一步的跟踪,直到最后。如果我直接F5,就直接弹出错误。。所以,请问下,怎么跟踪 有源文件,调试时还是汇编代码?没生成pdb符号文件? 比如,服务端发消息后,客户顿OnRecv就会收到消息,如果一步步的调试,直到这个函数的最后,也不会出问题如果跟踪到最后,还一步一步的跟踪,就会是汇编。也看太不懂。。call 这出现问题了========================如果不想一直处于汇编下,跟踪,按F5就会出现错误 还有一点: 我最开始的代码,Listen中代码,我时写在OnCreate中的 因为,WSASelect中要用到hWnd,所以就放在现在的位置了Listen中onCreate中,调用WSAselect,hWMD好像还是0 又发现了新问题如果我把OnRecv中的代码 全部去掉也一样 会弹出错误 MFC 位图 透明 定义的问题 工作线程中调用MDIGetActive函数出错,咋办呢? 请教:急,送分 如何激活第一个程序的实例! 串口出现的问题 请问:在console程序里怎么画图呀? 怎么让IE中的ocx响应‘BackSpace’、‘Tab’的键盘消息? 有没有一个COM 是提供文件的压缩功能的,就象WINZIP 关于windows store app 版本 dll 嵌入资源的问题 dfusion是什么软件开发的? 求助“ug外部模式开发步骤或实例”
Debug下call stack看函数调用堆栈~
{
}__except(1)
{ }
用SEH
然后,在release下就出现。。不知道怎么调试。虽然可以在RELEASE下调试但是,我这个情况有点特殊我把相关代码贴下:
有个C/S模式的监控系统,服务端对客户端进行监控在客户端:
CMyApp::InitInstance()
{
//省略。。
pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE; m_pMainWnd = pMainFrame;//pMainFrame为CMyApp的成员 pMainFrame->Listen();//在主框架中进行侦听,以便接受服务端的消息 ....
....
return TRUE;
}CMainFrame::Listen()
{
//获取本机IP
hostent* phost = gethostbyname("");
char* localIP = inet_ntoa (*(struct in_addr *)*phost->h_addr_list);
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = inet_addr(localIP);
addr.sin_port = htons(5001);
//创建套接字
m_Socket = socket(AF_INET,SOCK_DGRAM,0);
if (m_Socket == INVALID_SOCKET)
{
MessageBox("套接字创建失败!");
return;
}
char* len = "512";
if (setsockopt(m_Socket,SOL_SOCKET,SO_SNDBUF,len,4)!= 0)
{
MessageBox("设置失败!");
return;
}
//绑定套接字
if (bind(m_Socket,(sockaddr*)&addr,sizeof(addr))==SOCKET_ERROR)
{
DWORD dwError=::GetLastError();
return;
}
WSAAsyncSelect(m_Socket,this->m_hWnd,CM_RECEIVED,FD_READ);
m_Confirm = TRUE;
pSendBuf = new char[2048*2048*2];
pHeader = pSendBuf;
m_FrameIndex=0;
count=0;
m_Received = FALSE;
m_Counter = 0; }void CMainFrame::OnReceived()
{
char* pData = new char[1024];
memset(pData,0,1024);
sockaddr_in addr;
int factsize =sizeof(sockaddr);
int ret = recvfrom(m_Socket,pData,1024,0,(sockaddr*)&addr,&factsize);
if (ret != -1)
{
if(ret==3)
{
m_ServerIP=inet_ntoa(addr.sin_addr);
addr1.sin_addr.S_un.S_addr=inet_addr(m_ServerIP);
m_Received = TRUE;
GetDeskMAP();
}
else if (ret==8)
{
m_Received = TRUE;
m_FrameIndex +=1;
if (m_FrameIndex<count)
SendData(m_FrameIndex,mod,bmpsize,count,pSendBuf,addr1);
else
GetDeskMAP();
}
} delete []pData;
}
==================================================附注:在int ret = recvfrom(m_Socket,pData,1024,0,(sockaddr*)&addr,&factsize);
全部被注释后,如果recvfrom这行,不注释,就有同样的问题。如果注释了,就没有问题====================
生成pdb符号文件后,就可以release调试了
没生成pdb符号文件?
比如,服务端发消息后,客户顿OnRecv就会收到消息,如果一步步的调试,直到这个函数的最后,也不会出问题如果跟踪到最后,还一步一步的跟踪,就会是汇编。也看太不懂。。call 这出现问题了========================
如果不想一直处于汇编下,跟踪,按F5就会出现错误
onCreate中,调用WSAselect,hWMD好像还是0