2010-10-22 5 views

Antwort

5

Dies bedeutet, dass der Debugger seinen Wert nicht ermitteln kann.

Zum Beispiel sehen Sie das ziemlich viel, wenn Ihr Code HWND s beinhaltet. Wenn Sie die Windows-Header-Dateien durchsehen, wird es wie folgt über einen Makro definiert:

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

So ist die Art von HWND ist wirklich der Typ „Zeiger auf ein HWND__“. Die HWND Werte, die Sie von Funktionen wie CreateWindow() erhalten, sind jedoch keine Zeiger auf irgendetwas.

Aber der Debugger wird versuchen, den Wert des unused Mitglied in der Struktur, um herauszufinden, aber kann es nicht tun:

Watch Window

Sie auch diese Art von Fehler angezeigt wird, wenn die Variable beobachtet hat schlechte oder fehlende Typinformationen.

+0

Nicht wahr. Das ??? Die Fehlerzeichenfolge steht im Zusammenhang mit Informationen zu ungültigen Informationen. Wenn es den Ausdruck nicht auswerten kann, wird es eine nützlichere Fehlermeldung liefern – JaredPar

+0

@JaredPar: Meine Formulierung ist ein bisschen aus. Was ich meinte war, dass der Debugger seinen Wert nicht herausfinden kann. –

+0

Gotcha. Die editierte Version räumte die Verwirrung auf. Aber es zeigt das ??? für schlechte Typen und schlechte Werte. – JaredPar

1

Ist dies ein C++ - Projekt?

Der Debugger verwendet normalerweise das "???" string, wenn es einen Ausdruck auswerten kann, aber keine Typinformationen für einen bestimmten Teil der Anzeige erfassen kann. Dies tritt normalerweise aufgrund fehlender oder falscher PDB-Symbole auf.

Es gibt wahrscheinlich eine Möglichkeit, dass dies auftritt, wenn der Ausdruck auf beschädigte Daten zugreift (virtuelle Tabellen oder RTTI überschreiben). Aber ich weiß nicht 100%, ob das stimmt.

1

In der Regel bedeutet dies, dass der Zeiger oder die Referenz auf nicht zugreifbaren Speicher zeigt und daher den darzustellenden Wert nicht erhalten kann. Wenn Sie beispielsweise einen Zeiger haben, der auf ein Foo zeigen soll, interpretiert der Debugger normalerweise die Bits, auf die der Zeiger zeigt, als Foo - ob der Zeiger gültig ist oder nicht. In einigen Fällen kann jedoch ein Zeiger auf eine Position zeigen, die nicht einmal im Prozessbereich zugeordnet ist. In diesem Fall kann der Debugger die Bits nicht abrufen.

Verwandte Themen