2 qq516056204 qq516056204 于 2013.08.22 11:18 提问

VS2012编译不报错,但是单步调试的时候查看变量值,显示这个变量是未声明的标识符

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,这是什么情况

3个回答

u011782119
u011782119   2013.08.22 16:14

可能len不是全局变量吧

sgz007
sgz007   2014.05.11 22:31

在VS2008中通过设置 【tools]-->[options]->debug.. -> 将代码精确同步选上问题即可解决
vs2012有这个选项吗?

sgz007
sgz007   2014.05.11 23:26

有两种情况可能引起单步调试时显示的变量值与实现情况有差别,或系统直接提示该变量没有定义:
1) 原始代码与编译代码版本不一致引起的,请使用下列方法解决:
VS2012菜单[tools]->[options]->(Debugging)->General-->勾选(Require source files to exactly....)
2)在设置生成debug版本代码是选择了生成优化代码的选项,所以在跟踪时部分变量被编译器优化掉了。遇到这种情况首先关注工程属性选项:
Property Pages-->C/C++ --> General -->[Optimization] 大概使用Disabled (/Od)就不会出现单步跟踪跳行的情况了。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!