aar*_*rkk 3 c c++ debugging watch visual-studio-2010
我有一个非常奇怪的问题,其中一些变量的监视窗口值似乎与它们的"真实世界"值不匹配.调试器似乎在空间中关闭.这是显示它的最微小的代码片段:
printf("%d", pNodes[nNode].nColumn); // watch shows "4"
printf("%d", nColumn); // watch shows "1"
if (pNodes[nNode].nColumn != nColumn)
continue; // this is NOT called
Run Code Online (Sandbox Code Playgroud)
所以这是行为:
pNodes[nNode].nColumn,它会显示一个值4.nColumn,它会显示一个值1.pNodes[nNode].nColumn != nColumn在监视窗口中检查表达式 ,则计算结果为true.continue声明被跳过!printf()电话,看看发生了什么事情,并printf()打印出值1和1,这似乎与方式同意代码"流"(即,它并没有叫continue里面if的语句.我甚至可以检查内存&pNodes(nNode].nColumn,内存显示监视窗口显示的"不正确"值.所以看起来调试器与实际程序数据或其他东西完全"断开连接".我正在运行调试构建优化已关闭.我还检查过pNodes不对应于某个全局变量或其他更高范围的变量 - 它似乎只有一个本地版本.
这对我来说完全莫名其妙!我甚至不确定下一步要去找出问题所在.如果您有任何想法,我很乐意听到它们!
谢谢!
所以我认为我已经破获了这个案子:罪魁祸首是结构成员对齐.我将一堆项目混合在一起,其中一些项目在项目中具有不同的值.我删除了所有这些设置,让VS选择默认设置,问题就消失了.
某些项目中适用的值介于4个字节之间,某些项目中为Default,而其他项目则为空.该值在Configuration Properties/C/C++/Code Generation/Struct Member Alignment下.同样,我最终只是删除了项目的值.我认为这是在过去的某些时候设置的项目,以处理某种跨平台问题,但至少它已经修复了我现在正在做的工作!
感谢您所有的帮助!