Condividi tramite


Identificatori di formato per C++ nel debugger di Visual Studio

È possibile modificare il formato in cui viene visualizzato un valore nelle finestre Espressioni di controllo, Auto e Variabili locali usando identificatori di formato.

È anche possibile usare gli identificatori di formato nella finestra Immediata , nella finestra Comando , nei punti di traccia e anche nelle finestre di origine. Se si sospende su un'espressione in tali finestre, il risultato viene visualizzato in un DataTip. La visualizzazione del DataTip riflette il specificatore di formato.

Annotazioni

Quando il debugger nativo di Visual Studio è stato modificato in un nuovo motore di debug, sono stati aggiunti alcuni nuovi identificatori di formato e alcuni vecchi sono stati rimossi. Il debugger precedente viene ancora usato quando si esegue il debug dell'interoperabilità (nativa mista e gestita) con C++/CLI.

Impostare gli identificatori di formato

Verrà usato il codice di esempio seguente:

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

Aggiungere la variabile my_var1 alla finestra Osservazione durante il debug, Debug>Windows>Osservazione>1. Fare quindi clic con il pulsante destro del mouse sulla variabile e selezionare Visualizzazione esadecimale. La finestra Espressione di controllo mostra ora il valore 0x0065. Per visualizzare questo valore espresso come carattere anziché come intero, fare clic con il pulsante destro del mouse e deselezionare Visualizzazione esadecimale. Aggiungere quindi l'identificatore di formato carattere , c nella colonna Nome dopo il nome della variabile. La colonna Valore mostra ora 101 'e'.

Screenshot della finestra di controllo di Visual Studio con una riga selezionata che mostra my_var1.c con il valore 101 'e' e di tipo int.

È possibile visualizzare e selezionare da un elenco di identificatori di formato disponibili aggiungendo una virgola (,) al valore nella finestra Watch.

WatchFormatSpecDropdown

Identificatori di formato

Le tabelle seguenti descrivono gli identificatori di formato che è possibile usare in Visual Studio. Gli identificatori in grassetto sono supportati solo per il nuovo debugger e non per il debug di interoperabilità con C++/CLI.

Identificatore Formato Valore di osservazione originale Valore visualizzato
d numero intero in notazione decimale 0x00000066 102
o intero ottale senza segno 0x00000066 000000000146
x

h
Intero esadecimale 102 0xcccccccc
X

H
Intero esadecimale 102 0xCCCCCCCC
Xb

Hb
intero esadecimale (senza 0x iniziale) 102 cccccccc
Xb

Hb
intero esadecimale (senza 0x iniziale) 102 CCCCCCCC
b intero binario senza segno 25 0b00000000000000000000000000011001
Bb intero binario senza segno (senza 0b iniziale) 25 00000000000000000000000000011001
e notazione scientifica 25000000 2.500000e+07
g più breve di scientifico o a virgola mobile 25000000 2.5e+07
c carattere singolo 0x0065 101 'e'
s const char* string (con virgolette) <location> "hello world" ciao mondo
Sb const char* string (senza virgolette) <location> "ciao mondo" Salve, mondo
s8 Stringa UTF-8 <location> "Questa è una tazza di caffè UTF-8 ☕" "Questa è una tazza ☕ di caffè UTF-8 "
s8b Stringa UTF-8 (senza virgolette) <location> "hello world" Salve, mondo
su Stringa Unicode (codifica UTF-16) (tra virgolette) <location> L"hello world" L"ciao mondo"

ciao mondo
sostituto Stringa Unicode (codifica UTF-16) (senza virgolette) <location> L"ciao mondo" Salve, mondo
bstr Stringa binaria BSTR (tra virgolette) <location> L"hello world" L"ciao mondo"
Env Blocco di ambiente (stringa con terminazione double-null) <posizione> L"=::=::\\" L"=::=::\\\0=C:=C:\\windows\\system32\0ALLUSERSPROFILE=...
s32 Stringa UTF-32 (con virgolette) <location> U"hello world" U"ciao mondo"
s32b Stringa UTF-32 (senza virgolette) <location> U"ciao mondo" Salve, mondo
en enum Sabato(6) Sabato
Hv Tipo di puntatore: indica che il valore del puntatore esaminato è il risultato dell'allocazione dell'heap di una matrice, ad esempio, new int[3]. <posizione>{<primo membro>} <location>{<primo membro>, <secondo membro>, ...}
Na Elimina l'indirizzo di memoria di un puntatore a un oggetto . <location>, {member=value...} {member=value...}
Nd Visualizza solo le informazioni sulla classe di base, ignorando le classi derivate (Shape*) square include informazioni sulla classe base e sulle classi derivate Visualizza solo le informazioni sulla classe di base
hr Codice di errore HRESULT o Win32. Questo identificatore non è più necessario per gli HRESULT perché il debugger li decodifica automaticamente. S_OK S_OK
wc Flag della classe Window 0x0010 WC_DEFAULTCHAR
Wm Numeri di messaggio di Windows 16 WM_CLOSE
Nr Elimina l'elemento "Visualizzazione non elaborata"
nvo Mostra l'elemento "Visualizzazione non elaborata" solo per i valori numerici
! formato non elaborato, ignorando le personalizzazioni delle visualizzazioni dei tipi di dati <rappresentazione personalizzata> 4
maneggiare Visualizza informazioni sull'handle win32 0x000000000000009c Visualizza informazioni utili sull'handle, ad esempio l'ID del thread e così via.

Annotazioni

Quando l'identificatore di formato hv è presente, il debugger tenta di determinare la lunghezza del buffer e di visualizzare tale numero di elementi. Poiché non è sempre possibile che il debugger trovi la dimensione esatta del buffer di una matrice, è consigliabile usare un identificatore (pBuffer,[bufferSize]) di dimensioni quando possibile. L'identificatore di formato hv è utile quando la dimensione del buffer non è prontamente disponibile.

Specificatori di dimensioni per i puntatori come matrici

Se si dispone di un puntatore a un oggetto che si desidera visualizzare come matrice, è possibile usare un numero intero o un'espressione per specificare il numero di elementi della matrice.

Identificatore Formato Valore di osservazione originale Valore visualizzato
n Intero decimale o esadecimale pBuffer,[32]

pBuffer,[0x20]
Visualizza pBuffer come matrice di 32 elementi.
[exp] Espressione C++ valida che restituisce un numero intero. pBuffer,[bufferSize] Visualizza pBuffer come matrice di bufferSize elementi.
expand(n) Espressione C++ valida che restituisce un numero intero pBuffer, expand(2) Visualizza il terzo elemento di pBuffer

Identificatori di formato per il debug di interoperabilità con C++/CLI

Identificatore Formato Valore di osservazione originale Valore visualizzato
o intero ottale senza segno 0xF065 0170145
x

X
Intero esadecimale 61541 0x0000f065
c carattere singolo <ubicazione> 101 'e'
s const char* (con virgolette) <ubicazione> ciao mondo
su const wchar_t*

const char16_t* (con virgolette)
<ubicazione> L"ciao mondo"
sostituto const wchar_t*

const char16_t*
<ubicazione> Salve, mondo
s8 const char* (con virgolette) <ubicazione> ciao mondo
hr Codice di errore HRESULT o Win32.
Questo identificatore non è più necessario per gli HRESULT perché il debugger li decodifica automaticamente.
S_OK S_OK
wc Flag della classe Window 0x00000040, WC_DEFAULTCHAR
Wm Numeri di messaggio di Windows 0x0010 WM_CLOSE
! formato non elaborato, ignorando eventuali personalizzazioni della visualizzazione dei tipi di dati <rappresentazione personalizzata> 4

I specificatori d, e, f, g, h, i, l, m, ma, mb, md, mq, mu, mw e u per il codice nativo e C++/CLI richiedevano il debugger legacy, che non è più supportato in Visual Studio 2022 o versioni successive.

Gli identificatori in grassetto sono supportati solo per il debug di codice nativo e C++/CLI. Questi identificatori richiedono il debugger legacy, specificato usando la modalità di compatibilità gestita.

Identificatore Formato Valore di osservazione originale Valore visualizzato
d

io
intero decimale con segno 0xF000F065 -268373915
u intero decimale senza segno 0x0065 101
o intero ottale senza segno 0xF065 0170145
x

X
Intero esadecimale 61541 0x0000f065
l

h
prefisso lungo o corto per: d, i, u, o, x, X 00406042 0x0c22
f virgola mobile con segno (3./2.), f 1.500000
e notazione scientifica firmata (3.0/2.0) 1,500000e+000
g notazione scientifica con segno a virgola mobile o firmata,
qualunque sia il più breve
(3.0/2.0) 1,5
c carattere singolo <ubicazione> 101 'e'
s const char* (con virgolette) <ubicazione> ciao mondo
su const wchar_t*

const char16_t* (con virgolette)
<ubicazione> L"ciao mondo"
sostituto const wchar_t*

const char16_t*
<ubicazione> Salve, mondo
s8 const char* (con virgolette) <ubicazione> ciao mondo
hr Codice di errore HRESULT o Win32.
Questo identificatore non è più necessario per gli HRESULT perché il debugger li decodifica automaticamente.
S_OK S_OK
wc Flag della classe Window 0x00000040, WC_DEFAULTCHAR
Wm Numeri di messaggio di Windows 0x0010 WM_CLOSE
! formato non elaborato, ignorando eventuali personalizzazioni della visualizzazione dei tipi di dati <rappresentazione personalizzata> 4

Identificatori di formato per i percorsi di memoria nel debug di interoperabilità con C++/CLI

Nella tabella seguente vengono descritti i simboli di formattazione usati per i percorsi di memoria. È possibile usare un identificatore di posizione della memoria con qualsiasi valore o espressione che restituisce una posizione.

Gli identificatori in grassetto sono supportati solo per il debug di codice nativo e C++/CLI. Questo richiede il debugger legacy, specificato usando la modalità di compatibilità gestita.

Symbol Formato Valore di osservazione originale Valore visualizzato
mamma 64 caratteri ASCII 0x0012ffac 0x0012ffac .4...0...". 0W&....... 1W&.0.:W.. 1....".. 1.JO&.1.2..".. 1...0y. 1
m 16 byte in esadecimale, seguito da 16 caratteri ASCII 0x0012ffac 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&..
MB 16 byte in esadecimale, seguito da 16 caratteri ASCII 0x0012ffac 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&..
mw 8 parole 0x0012ffac 0x0012ffac 34B3 00CB 3084 8094 22FF 308A 2657 0000
md 4 parole doppie 0x0012ffac 0x0012ffac 00CB34B3 80943084 308A22FF 00002657
mq 2 quadword 0x0012ffac 0x0012ffac 7ffdf00000000000 5f441a790012fdd4
Mu Caratteri a 2-byte (Unicode) 0x0012ffac 0x0012ffac 8478 77f4 ffff ffff 0000 0000 0000 0000

Identificatore di dimensioni per i puntatori come matrici nel debug di interoperabilità con C++/CLI

Se si dispone di un puntatore a un oggetto che si desidera visualizzare come matrice, è possibile usare un numero intero per specificare il numero di elementi della matrice.

Identificatore Formato Expression Valore visualizzato
n Numero intero decimale pBuffer[32] Visualizza pBuffer come matrice di 32 elementi.