我遇到了一个非常奇怪的问题,其中某些变量的监视窗口值似乎与它们的“真实世界”值不匹配。调试器似乎在空间中关闭。这是显示它的最小代码片段:
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 不对应于某个全局变量或范围更高的其他变量——似乎只有一个本地版本。
这对我来说完全莫名其妙!我什至不确定下一步该去哪里试图找出问题所在。如果您有任何想法,我很想听听他们的意见!
谢谢!