2010-10-22 112 views

回答

5

這意味着調試器無法計算出它的值。

例如,如果您的代碼涉及HWND s,您會看到相當多的內容。如果你通過Windows的頭文件,它是通過一個宏定義是這樣的:

struct HWND__{int unused;}; typedef struct HWND__ *HWND; 

所以HWND類型是真正的類型「指針到HWND__」。但是,從CreateWindow()等函數獲得的值HWND實際上並不是指向任何內容的指針。

但調試器會嘗試找出在結構中的unused成員的值,但不能做到這一點:

Watch Window

您也將看到這些類型的錯誤時觀察的變量類型信息不正確或缺失。

+0

不正確。該???錯誤字符串與錯誤類型信息有關。如果它不能評估表達式,它將提供更有用的錯誤消息 – JaredPar 2010-10-22 21:52:51

+0

@JaredPar:我的措辭有點偏離。我的意思是調試器無法弄清它的價值。 – 2010-10-22 22:03:48

+0

Gotcha。編輯版本解決了混亂。但它確實顯示???對於不好的類型和不好的價值。 – JaredPar 2010-10-22 22:07:33

1

這是一個C++風格的項目嗎?

調試器通常使用「???」字符串,當它能夠評估表達式但不能獲取顯示的特定部分的任何類型信息時。這通常是因爲缺少或不正確的PDB符號。

如果表達式訪問損壞的數據(overriten虛擬表或RTTI),可能會出現這種情況。但我不會100%知道這是否屬實。

1

通常這意味着指針或引用指向無法訪問的內存,因此無法獲取值。例如,如果你有一個應該指向Foo的指針,那麼調試器通常會將指針指向的位作爲Foo進行解釋 - 指針是否有效。但是在某些情況下,野生指針可能指向一個甚至沒有映射到進程空間的位置。在這種情況下,調試器無法獲取這些位。

相關問題