win7下静态编译的exe,在win10上跑起来,但是有bug。然后我在win10上装了vs2010,就没bug了。

qq_35697153 2016-07-29 10:01:52
标题很长。
win7下静态编译的exe,在win10上跑起来,但是有bug。
然后我在win10上装了vs2010,就没bug了。
bug现象是,这是一个搜索功能,接受底层的设备之后,只列出来设备的名字,但是设备的IP地址保存失败了。
没有bug点,没有错误提示,请教这个应该怎么分析。
有bug的位置的全部代码如下,

// TODO: 在此添加控件通知处理程序代码
if(m_hTreeDeviceRoot != NULL)
m_TreeControl.DeleteItem(m_hTreeDeviceRoot);

//2014.03.05这个数据是否需要重置
m_iDeviceCount = 1;
//保存ID的下标
SaveRecvIDCount = 0;

m_hTreeDeviceRoot = m_TreeControl.InsertItem(_T("All Device List"),0,0);
//根节点添加为1 以后的慢慢添加
m_TreeControl.SetItemData(m_hTreeDeviceRoot,1);

//默认把所有的都清除掉(初始化)
//****************************************************
//这个动作在
m_Monitor1Flag=FALSE;
m_Monitor2Flag=FALSE;

m_SendRecvFlag=FALSE;

m_ReadM1PCidFlag=FALSE;
m_ReadM2PCidFlag=FALSE;

ReadArrIpFlag=FALSE;

//先全部关掉所有的复选框
SetAllCheckBox();

//再删除之前有的下拉框资源
DeleteComboxString();

PCrecvID = -1;
AddNumber = 1;
AddNewComboxItem();
AddPicture();

CWnd::Invalidate(TRUE);

m_ProGress.SetPos(0);
ProGressPos = 0;

memset(&gIP,0,sizeof(gIP));
memset(&IpType,0,sizeof(IpType));
memset(&subNet,0,sizeof(subNet));
memset(&gateway,0,sizeof(gateway));


unsigned char buff2[128];
memset(buff2,0,sizeof(buff2));

unsigned char cmd;
cmd = 0xff;

unsigned char interfaceType;
interfaceType = 0x01;

unsigned char SendBuf[64];
memset(&SendBuf,0,sizeof(SendBuf));
int SendLen = 0;

//广播也走新协议
SendLen = CreateBroadDataPackage(&SendBuf,interfaceType,cmd);


//8 - 20
//预留位置的部分是一个

CreateBroadcastSocket();
//int m=0;
sendto(m_udpSockfd, (char *)SendBuf,SendLen ,0, (struct sockaddr *)&m_BroServerAddr,sizeof(struct sockaddr));
//发送
int k = 20;

//--------------------------------------------------------------
//特别标记。初始化为0.
//m_iDeviceCount=1;
//--------------------------------------------------------------

while (k--)
{
Sleep(10);
ProGressPos += 5;

if (ProGressPos>100)
ProGressPos=100;

m_ProGress.SetPos(ProGressPos);

//返回
int add_len=sizeof(struct sockaddr);
//接受到的是一个buf
memset(buff2,0,sizeof(buff2));

//_cprintf("ready for recv\n");
int RecvCount=recvfrom(m_udpSockfd, (char *)buff2, sizeof(buff2),0, (struct sockaddr *)&m_BroClientAddr,&add_len);//接受到buf、
_cprintf("%d \n",RecvCount);
//_cprintf("the Client recv ip is:%s \n",inet_ntoa(m_BroClientAddr.sin_addr));

//先比较 头 尾 和 Length
if ((buff2[0] == 0xa5)&&(buff2[1] == 0x6c)&&(buff2[RecvCount-1] == 0xae)&&(buff2[2] == RecvCount))
{
int NameLength = 0;//
//
for (int j = 18 ; j < RecvCount - 8 ; j++)//末尾三位是checsum 和尾
{
//if ((RecvBuf[j] = 0x21)&&(RecvBuf[j+2] = 0x21))
if ((buff2[j] == 0x2d)&&(buff2[j+1] == 0x0c)&&(buff2[j+2] == 0x2d)&&(buff2[16] == 0xff))
{
//j 找对了
NameLength = (RecvCount - 4) - (j + 7);//11位包括 8个ID 2个- -和1个.

//_cprintf("check is ok \n");
CString strLength;
strLength.Format(_T("%d"),NameLength);
//AfxMessageBox(strLength);

if (gIP[m_iDeviceCount-1][0]==0)
{
strncpy(gIP[m_iDeviceCount-1],inet_ntoa(m_BroClientAddr.sin_addr),15);
gIP[m_iDeviceCount-1][15]=0;
}


CString str;
#ifdef _UNICODE
str.Format(L"%S",gIP[m_iDeviceCount-1]);
#else
str.Format("%s",gIP[m_iDeviceCount-1]);
#endif

//int NameLength=RecvCount-31;
CString strName;
for(int k=0;k<NameLength;k++)
{
strName += buff2[j + 8 + k];
}

//这些ip 怎么保存起来12.23
HTREEITEM child=m_TreeControl.InsertItem(strName, 0, 0, m_hTreeDeviceRoot);
m_TreeControl.SetItemData(child,m_iDeviceCount+1);

//这里的++是为了主动添加ip的ID
m_iDeviceCount++;
m_TreeControl.Expand( m_hTreeDeviceRoot, TVE_EXPAND );

//break;
j = RecvCount - 8;//快速结束本次循环
}
}
}
}
_cprintf("the m_iDeviceCount is %d \n",m_iDeviceCount);

CloseSocket();


不知道能否帮忙看看。
...全文
217 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
encoderlee 版主 2016-07-29
  • 打赏
  • 举报
回复
每调用一个API都要检查返回值,尤其是与IO相关的API,然后进行错误处理并输出日志,这样才能快速定位问题所在
oyljerry 2016-07-29
  • 打赏
  • 举报
回复
是否运行时库也是用的/MT等。
Eleven 2016-07-29
  • 打赏
  • 举报
回复
打log,看看哪个函数调用失败,数据是否正常~
笨笨仔 2016-07-29
  • 打赏
  • 举报
回复
这原本应该是个编译环境问题,既然没问题不就行了?
qq_35697153 2016-07-29
  • 打赏
  • 举报
回复
引用 3 楼 oyljerry 的回复:
是否运行时库也是用的/MT等。
这个问题,我现在发现realease版本是/mt的。但是跑不起来 debug的版本是/mdt的,竟然不会出现这个bug
qq_35697153 2016-07-29
  • 打赏
  • 举报
回复
引用 2 楼 VisualEleven 的回复:
打log,看看哪个函数调用失败,数据是否正常~
比较小白的问题,log怎么弄出来? 目前为止我还没有这么弄过呢
qq_35697153 2016-07-29
  • 打赏
  • 举报
回复
引用 1 楼 wxhxj0268 的回复:
这原本应该是个编译环境问题,既然没问题不就行了?
可是发给客户就也是这样的,没办法获取IP。 我本来想装个VS2010来调试的,现在装了,直接全套没问题。 难道我们需要跟客户说,让他们的电脑装VS吗?应该不是这样吧?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧