Visual Studio观察窗口中的问号(???)是什么意思?
答
这意味着调试器无法计算出它的值。
例如,如果您的代码涉及HWND
s,您会看到相当多的内容。如果你通过Windows的头文件,它是通过一个宏定义是这样的:
struct HWND__{int unused;}; typedef struct HWND__ *HWND;
所以HWND
类型是真正的类型“指针到HWND__
”。但是,从CreateWindow()
等函数获得的值HWND
实际上并不是指向任何内容的指针。
但调试器会尝试找出在结构中的unused
成员的值,但不能做到这一点:
您也将看到这些类型的错误时观察的变量类型信息不正确或缺失。
答
这是一个C++风格的项目吗?
调试器通常使用“???”字符串,当它能够评估表达式但不能获取显示的特定部分的任何类型信息时。这通常是因为缺少或不正确的PDB符号。
如果表达式访问损坏的数据(overriten虚拟表或RTTI),可能会出现这种情况。但我不会100%知道这是否属实。
答
通常这意味着指针或引用指向无法访问的内存,因此无法获取值。例如,如果你有一个应该指向Foo的指针,那么调试器通常会将指针指向的位作为Foo进行解释 - 指针是否有效。但是在某些情况下,野生指针可能指向一个甚至没有映射到进程空间的位置。在这种情况下,调试器无法获取这些位。
不正确。该???错误字符串与错误类型信息有关。如果它不能评估表达式,它将提供更有用的错误消息 – JaredPar 2010-10-22 21:52:51
@JaredPar:我的措辞有点偏离。我的意思是调试器无法弄清它的价值。 – 2010-10-22 22:03:48
Gotcha。编辑版本解决了混乱。但它确实显示???对于不好的类型和不好的价值。 – JaredPar 2010-10-22 22:07:33