我遇到了一个非常奇怪的问题,其中某些变量的监视窗口值似乎与它们的“真实世界”值不匹配。调试器似乎空间不足。这是显示它的最小代码段:
printf("%d", pNodes[nNode].nColumn); // watch shows "4"
printf("%d", nColumn); // watch shows "1"
if (pNodes[nNode].nColumn != nColumn)
continue; // this is NOT called
所以这是行为:
pNodes[nNode].nColumn
中,它将显示4
的值。 nColumn
中,它将显示1
的值。 pNodes[nNode].nColumn != nColumn
,则其计算结果为true
。 continue
语句! printf()
调用以查看发生了什么,然后printf()
打印值1
和1
,这似乎与代码“流”的方式一致(即,它没有在continue
语句中调用if
。我什至可以通过
&pNodes(nNode].nColumn
检查内存,并且内存显示监视窗口向我显示的“不正确”值。因此,似乎调试器已与实际程序数据或某些东西完全“断开连接”。我正在运行调试构建优化已关闭。我还检查了pNodes是否不对应于某些全局变量或范围更高的其他变量-似乎只有一个本地版本。这完全让我感到困惑!我什至不知道下一步该怎么解决这个问题。如果您有任何想法,我很乐意听到!
谢谢!
最佳答案
因此,我认为我已经破案了:罪魁祸首是结构成员对齐。我有一堆项目混合在一起,其中一些在项目内部对该领域具有不同的值(value)。我删除了所有设置,只是让VS选择默认设置,问题就消失了。
适用的值在某些项目中为 4字节,在某些项目中为默认,在其他项目中为空。该值位于配置属性/C/C++/代码生成/结构成员对齐下。同样,我最后只是完全删除了项目的值。我认为这是在过去某个时候在项目上设置的,以处理某种跨平台问题,但至少对于我现在正在做的工作是固定的!
感谢您所有的帮助!