Visual Studio 2010 Professional中不正确的表值
Incorrect watch values in Visual Studio 2010 Professional
我遇到了一个非常奇怪的问题,其中一些变量的手表窗口值似乎与"现实世界"的值不匹配。调试器似乎只是在空间中关闭。下面是显示它的最小代码片段:
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
,这似乎与代码"流动"的方式一致(即它不在if
语句中调用continue
。
我甚至可以在&pNodes(nNode].nColumn
检查内存,内存显示"不正确"的值,手表窗口显示给我。因此,调试器似乎与实际的程序数据或其他东西完全"断开连接"。我正在运行调试构建优化被关闭。我还检查了pNodes不对应于一些全局变量或其他范围更高的变量——似乎只有一个本地版本。
这完全让我困惑!我甚至不知道下一步该去哪里解决问题。如果你有什么想法,我很乐意听听!
谢谢!
所以我想我已经破解了这个案例:罪魁祸首是Struct Member Alignment。我有一堆项目混合在一起,其中一些项目中这个字段的值是不同的。我删除了所有的设置,只是让VS选择默认值,问题已经消失了。
适用的值在4字节之间,在一些项目中Default,在其他项目中完全为空。该值在Configuration Properties/C/c++/Code Generation/Struct Member Alignment下。同样,我最终只是删除了所有项目的值。我认为这在过去的项目中是为了处理一些跨平台问题而设置的,但至少对于我现在所做的工作来说是固定的!
谢谢你的帮助!
如果使用不在作用域中的变量设置watch,这是我在Visual Studio中经常看到的行为。它真的应该说"<不在作用域>"或者其他更有用的东西。不在作用域>
如果你正在执行这些代码行,你仍然看到那些幽灵般的值,我不知道:你确定这是一个调试构建吗?
Visual Studio 2010调试器在跟踪手表变量内存位置时存在问题。有时它会严重误导你,因为VS2010并没有显示你认为的变量。
例如,如果你在函数中重用了一个变量名,那么随着执行范围的改变,应该在监视窗口中显示哪个内存位置:
for (int i=0; i<10; i++) {
i=i+1; // do something, what isn't important
}
int i;
for (i=0; i<5; i++) {
i=i+1; // do something
}
printf("i=%dn", i);
现在将变量i放在watch窗口中。
显然,在手表窗口中显示的i(或值)很重要。如果运行该程序,您将看到,当它进入for循环时,watch会跟踪for循环的i变量。当它退出for循环,然后用另一个同名变量击中下面的代码时,watch窗口不会跟踪该变量的内存。
您将看到watch窗口仍然声明i为10,即使在第二个循环中i现在是0,1,2,…在第二个循环之后,I实际上是6,但是watch窗口仍然声明I是10。
和应该做什么手表窗口?我认为,它应该总是向您显示具有该监视名称的变量的值,即在范围内,因为语言规则告诉您在任何给定时间内,这些变量中只有一个在范围内。
这是调试器的监视窗口功能中的一个错误(VS2010似乎便宜地只是找到与您在监视中给出的名称相匹配的函数中的第一个变量,并顽强地监视该内存空间,无论代码中还有什么,即使具有相同名称的新变量已经接管了范围(此时监视窗口现在对您撒谎!)
- 使用2个键的cpp-stl::优先级队列排序不正确
- 正弦级数方程计算不正确
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 密码登录程序将永远循环并显示不正确的结果
- 在C++中返回不正确的楼层函数值
- 形状对象的旋转和缩放不正确C++
- C++ 读取文件读取文件不正确
- 关于类的 Python 文档 - 对C++的引用不正确
- 特征 LLT 模块给出不正确的结果?
- glibcxx STL 在实现 std::valarray::sum() 时是否不正确?
- 如果语句逻辑不正确
- 来自逆 vp 矩阵和相机位置的光线方向不正确
- 不正确的操作数类型 MSVC
- 数组填充了不正确的值
- 我是否不正确地集中了这些字符数组?
- Visual Studio 2017 在外部"C"中使用模板时出现不正确的错误
- 值传递的参数在 Visual Studio 2015 x64 调试器中显示不正确
- Visual Studio 2010 Professional中不正确的表值
- Visual Studio 2008-vftable指针不正确?调试模式崩溃,发布即可
- Visual Studio 2012 平台工具集不正确