void CGPRS2012Dlg::OnOncommMscomm1()
{
// TODO: 在此处添加消息处理程序代码
Sleep(300);
VARIANT variant_inp;
COleSafeArray safearray_inp;
CString strtemp;
long len,k;
byte rxdata[1000];
for (int i=0;i<1000;i++)
{
rxdata[i]=0x00;
}
CString phone;
CString str;
CString imei;
CString time;
if (m_comm.get_CommEvent()==2)
{
variant_inp=m_comm.get_Input();
safearray_inp=variant_inp;
len=safearray_inp.GetOneDimSize();
for (k=0;k<len;k++)
{
safearray_inp.GetElement(&k,rxdata+k);
}
}
}
这是一个最简单的串口接收数据,但是len这个变量在调试的时候在监视窗口中显示为未声明的标识符然后我得不到len,而且for (k=0;k<len;k++)
{
safearray_inp.GetElement(&k,rxdata+k);
}
只循环一次,但是能得到正确的rxdata,这是什么情况
可能len不是全局变量吧
在VS2008中通过设置 【tools]-->[options]->debug.. -> 将代码精确同步选上问题即可解决
vs2012有这个选项吗?
有两种情况可能引起单步调试时显示的变量值与实现情况有差别,或系统直接提示该变量没有定义:
1) 原始代码与编译代码版本不一致引起的,请使用下列方法解决:
VS2012菜单[tools]->[options]->(Debugging)->General-->勾选(Require source files to exactly....)
2)在设置生成debug版本代码是选择了生成优化代码的选项,所以在跟踪时部分变量被编译器优化掉了。遇到这种情况首先关注工程属性选项:
Property Pages-->C/C++ --> General -->[Optimization] 大概使用Disabled (/Od)就不会出现单步跟踪跳行的情况了。