Freigeben über


Formatbezeichner für C++ im Visual Studio-Debugger

Sie können das Format ändern, in dem ein Wert in den Fenstern Watch, Autos und Locals angezeigt wird, indem Sie Formatbezeichner verwenden.

Sie können auch Formatbezeichner im Direktfenster, im Befehlsfenster, in Tracepoints und sogar in Quellfenstern verwenden. Wenn Sie einen Ausdruck in diesen Fenstern anhalten, wird das Ergebnis in einer Dateninfo angezeigt. Die Dateninfoanzeige spiegelt den Formatbezeichner wider.

Hinweis

Wenn sich der systemeigene Debugger von Visual Studio in ein neues Debuggingmodul geändert hat, wurden einige neue Formatbezeichner hinzugefügt, und einige alte wurden entfernt. Der ältere Debugger wird weiterhin verwendet, wenn Sie das Interoperabilitätsdebugging (gemischt systemeigenes und verwaltetes) Debuggen mit C++/CLI durchführen.

Festlegen von Formatbezeichnern

Wir verwenden den folgenden Beispielcode:

int main() {
    int my_var1 = 0x0065;
    int my_var2 = 0x0066;
    int my_var3 = 0x0067;
}

Fügen Sie die my_var1 Variable beim Debuggen dem Watch-Fenster hinzu, Debug>Windows>Watch>Watch 1. Klicken Sie als Nächstes mit der rechten Maustaste auf die Variable, und wählen Sie "Hexadezimalanzeige" aus. Jetzt zeigt das Überwachungsfenster den Wert 0x0065 an. Um diesen Wert als Zeichen statt als ganze Zahl ausgedrückt zu sehen, klicken Sie zuerst mit der rechten Maustaste, und deaktivieren Sie die Hexadezimalanzeige. Fügen Sie dann den Zeichenformatbezeichner c in der Spalte "Name " nach dem Variablennamen hinzu. Die Spalte "Wert " zeigt jetzt 101 "e".

Screenshot des Visual Studio Watch-Fensters mit einer ausgewählten Zeile, die my_var1.c mit dem Wert 101

Sie können eine Liste der verfügbaren Formatbezeichner anzeigen und auswählen, indem Sie ein Komma (,) an den Wert im Überwachungsfenster anfügen.

WatchFormatSpecDropdown

Formatbezeichner

In den folgenden Tabellen werden die Formatbezeichner beschrieben, die Sie in Visual Studio verwenden können. Fett formatierte Spezifizierer werden nur vom neuen Debugger unterstützt und nicht für das Interoperabilitäts-Debugging mit C++/CLI.

Spezifikationssymbol Format Originaler Uhrenwert Angezeigter Wert
d Dezimal-Ganzzahl 0x00000066 102
o nicht signierte oktale ganze Zahl 0x00000066 000000000146
x

h
hexadezimale ganze Zahl 102 0xcccccccc
X

H
hexadezimale ganze Zahl 102 0xCCCCCCCC
xb

Hb
Hexadezimale Ganzzahl (ohne führendes 0x) 102 cccccccc
Xb

Hb
Hexadezimaler Ganzzahl (ohne vorausgehende 0x) 102 CCCCCCCC
b Nicht signierte binäre ganze Zahl 25 0b00000000000000000000000000011001
Bb nicht signierte binäre ganze Zahl(ohne führende 0b) 25 00000000000000000000000000011001
e wissenschaftliche Schreibweise 25000000 2.500000e+07
g kürzer von wissenschaftlichen oder Gleitkommapunkten 25000000 2,5e+07
c einzelnes Zeichen 0x0065 101 'e'
s const char* string (mit Anführungszeichen) <location> "Hallo Welt" "Hallo Welt"
Sb const char* string (keine Anführungszeichen) <Location> "Hello World" Hallo Welt
s8 UTF-8-Zeichenfolge <Ort> "Dies ist eine UTF-8 Kaffee-Tasse ☕" "Dies ist eine UTF-8-Kaffeebecher ☕ "
s8b UTF-8-Zeichenfolge (keine Anführungszeichen) <Standort> "Hallo Welt" Hallo Welt
Su Unicode-Zeichenfolge (UTF-16-Codierung) (mit Anführungszeichen) <location> L"hallo Welt" L"Hallo Welt"

"Hallo Welt"
sub Unicode-Zeichenfolge (UTF-16-Codierung) (keine Anführungszeichen) <location> L"Hallo Welt" Hallo Welt
bstr BSTR-Binäre Zeichenfolge (mit Anführungszeichen) <location> L"hello world" L"Hallo Welt"
Umgebung Umgebungsblock (Zeichenfolge mit Doppel-Null-Beendigung) <location> L"=::::\\" L"=:::\\\0=C:=C:\\windows\\system32\0ALLUSERSPROFILE=...
s32 UTF-32-Zeichenfolge (mit Anführungszeichen) <location> U"hello world" U"Hallo Welt"
s32b UTF-32-Zeichenfolge (keine Anführungszeichen) <location> U"hello world" Hallo Welt
en enum Samstag(6) Saturday
Hv Zeigertyp - gibt an, dass der zu prüfende Zeigerwert das Ergebnis der Heap-Zuordnung eines Arrays ist, z. B. new int[3]. <Standort>{<erstes Element>} <Ort>{<erstes Mitglied>, <zweites Mitglied>, ...}
Na Unterdrückt die Speicheradresse eines Zeigers auf ein Objekt. <Standort>, {member=value...} {member=value...}
Nd Zeigt nur die Basisklasseninformationen an, wobei abgeleitete Klassen ignoriert werden (Shape*) square enthält Basisklassen- und abgeleitete Klasseninformationen Zeigt nur Basisklasseninformationen an.
Hr HRESULT- oder Win32-Fehlercode. Dieser Bezeichner wird für HRESULTs nicht mehr benötigt, da der Debugger sie automatisch decodiert. S_OK S_OK
WC Windows-Klassenflagge 0x0010 WC_DEFAULTCHAR
wm Windows-Nachrichtennummern 16 WM_CLOSE
Nr "Element 'Rohansicht' unterdrücken"
nvo Nur das Element "Rohansicht" für numerische Werte anzeigen
! unformatiertes Format, wobei alle Anpassungen von Datentypansichten ignoriert werden <angepasste Darstellung> 4
Griff Zeigt Informationen zum Win32-Handle an 0x000000000000009c Zeigt nützliche Informationen zu Handle wie Thread-ID usw. an.

Hinweis

Wenn der hv-Formatbezeichner vorhanden ist, versucht der Debugger, die Länge des Puffers zu bestimmen und diese Anzahl von Elementen anzuzeigen. Da es für den Debugger nicht immer möglich ist, die genaue Puffergröße eines Arrays zu finden, sollten Sie nach Möglichkeit einen Größenbezeichner (pBuffer,[bufferSize]) verwenden. Der hv-Formatbezeichner ist nützlich, wenn die Puffergröße nicht leicht verfügbar ist.

Größenbezeichner für Zeiger als Arrays

Wenn Sie einen Zeiger auf ein Objekt haben, das Sie als Array anzeigen möchten, können Sie eine ganze Zahl oder einen Ausdruck verwenden, um die Anzahl der Arrayelemente anzugeben.

Spezifikationssymbol Format Originaler Uhrenwert Angezeigter Wert
n Dezimal- oder Hexadezimal-Ganzzahl pBuffer;[32]

pBuffer;[0x20]
pBuffer wird als 32-Element-Array angezeigt.
[exp] Ein gültiger C++-Ausdruck, der als ganze Zahl ausgewertet wird. pBuffer;[bufferSize] Zeigt pBuffer als Array von bufferSize Elementen an.
expand(n) Ein gültiger C++-Ausdruck, der als ganze Zahl ausgewertet wird pBuffer, erweitern(2) Zeigt das dritte Element von pBuffer

Formatieren von Bezeichnern für das Interoperabilitätsdebugging mit C++/CLI

Spezifikationssymbol Format Originaler Uhrenwert Angezeigter Wert
o nicht signierte oktale ganze Zahl 0xF065 0170145
x

X
hexadezimale Ganzzahl 61541 0x0000f065
c einzelnes Zeichen <Ort> 101 'e'
s const char* (mit Anführungszeichen) <Ort> "Hallo Welt"
Su const wchar_t*

const char16_t* (mit Anführungszeichen)
<Ort> L"Hallo Welt"
sub const wchar_t*

const char16_t*
<Ort> Hallo Welt
s8 const char* (mit Anführungszeichen) <Ort> "Hallo Welt"
Hr HRESULT- oder Win32-Fehlercode.
Dieser Bezeichner wird für HRESULTs nicht mehr benötigt, da der Debugger sie automatisch decodiert.
S_OK S_OK
WC Windows-Klassenflagge 0x00000040, WC_DEFAULTCHAR
wm Windows-Nachrichtennummern 0x0010 WM_CLOSE
! unformatiertes Format, wobei alle Anpassungen der Datentypansicht ignoriert werden <angepasste Darstellung> 4

Der d-, e-, f-, g-, h-, i-, l-, m-, ma-, mb-, md-, mq-, mu-, mw- und u-Bezeichner für systemeigenen und C++/CLI-Code benötigten den Legacy-Debugger, der in Visual Studio 2022 oder höheren Versionen nicht unterstützt wird.

Spezifizierer in Fettschrift werden nur für das Debuggen von systemeigenem und C++/CLI-Code unterstützt. Für diese Spezifizierer ist der Legacy-Debugger erforderlich, der mithilfe des Managed-Kompatibilitätsmodus angegeben wird.

Spezifikationssymbol Format Originaler Uhrenwert Angezeigter Wert
d

i
Vorzeichenbehaftete Dezimalzahl 0xF000F065 -268373915
u Nicht signierte ganzzahlige Dezimalzahl 0x0065 101
o nicht signierte oktale ganze Zahl 0xF065 0170145
x

X
hexadezimale Ganzzahl 61541 0x0000f065
l

h
langes oder kurzes Präfix für: d, i, u, o, x, X 00406042 0x0c22
f signierter Gleitkommapunkt (3./2.), f 1.500000
e signierte wissenschaftliche Schreibweise (3.0/2.0) 1.500000e+000
g signierter Gleitkommapunkt oder signierte wissenschaftliche Notation,
je nachdem, was kürzer ist
(3.0/2.0) 1.5
c einzelnes Zeichen <Ort> 101 'e'
s const char* (mit Anführungszeichen) <Ort> "Hallo Welt"
Su const wchar_t*

const char16_t* (mit Anführungszeichen)
<Ort> L"Hallo Welt"
sub const wchar_t*

const char16_t*
<Ort> Hallo Welt
s8 const char* (mit Anführungszeichen) <Ort> "Hallo Welt"
Hr HRESULT- oder Win32-Fehlercode.
Dieser Bezeichner wird für HRESULTs nicht mehr benötigt, da der Debugger sie automatisch decodiert.
S_OK S_OK
WC Windows-Klassenflagge 0x00000040, WC_DEFAULTCHAR
wm Windows-Nachrichtennummern 0x0010 WM_CLOSE
! unformatiertes Format, wobei alle Anpassungen der Datentypansicht ignoriert werden <angepasste Darstellung> 4

Formatbezeichner für Speicherorte beim Interoperabilitätsdebugging mit C++/CLI

In der folgenden Tabelle werden Formatierungssymbole beschrieben, die für Speicherorte verwendet werden. Sie können einen Speicherortbezeichner mit jedem Wert oder Ausdruck verwenden, der zu einem Speicherort ausgewertet wird.

Spezifizierer in Fettschrift werden nur für das Debuggen von systemeigenem und C++/CLI-Code unterstützt. Dies erfordert den Legacy-Debugger, angegeben mittels des Managed Compatibility Mode.

Symbol Format Originaler Uhrenwert Angezeigter Wert
Mama 64 ASCII-Zeichen 0x0012ffac 0x0012ffac .4...0...".0W&.......1W&.0.:W..1...."..1.JO&.1.2.."..1...0y....1
m 16 Byte hexadezimal, gefolgt von 16 ASCII-Zeichen 0x0012ffac 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&..
MB 16 Byte hexadezimal, gefolgt von 16 ASCII-Zeichen 0x0012ffac 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&..
Mw 8 Wörter 0x0012ffac 0x0012ffac 34B3 00CB 3084 8094 22FF 308A 2657 0000
md 4 Doppelwörter 0x0012ffac 0x0012ffac 00CB34B3 80943084 308A22FF 00002657
mq 2 Quadwords 0x0012ffac 0x0012ffac 7ffdf00000000000 5f441a790012fdd4
µ 2-Byte-Zeichen (Unicode) 0x0012ffac 0x0012ffac 8478 77f4 ffff ffff 0000 0000 0000 0000 0000

Größenbezeichner für Zeiger als Arrays beim Interopdebugging mit C++/CLI

Wenn Sie einen Zeiger auf ein Objekt haben, das Sie als Array anzeigen möchten, können Sie eine ganze Zahl verwenden, um die Anzahl der Arrayelemente anzugeben.

Spezifikationssymbol Format Ausdruck Angezeigter Wert
n Dezimalzahl (Ganzzahl) pBuffer[32] Wird als Array aus 32 Elementen angezeigt pBuffer.