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 suggerimento dati. La visualizzazione Suggerimento dati riflette l'identificatore di formato.

Nota

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 per il debug di interoperabilità (nativo e gestito combinati) 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 my_var1 variabile alla finestra Espressione di controllo durante il debug, Debug>di Windows>Watch>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 of the Visual Studio Watch window with one selected line that shows my_var1.c with a value of 101 'e' and a type of int.

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

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 Formatta Valore dell'espressione di controllo originale Valore visualizzato
d intero 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 abbreviazione della notazione scientifica o del formato a virgola mobile 25000000 2.5e+07
c Carattere singolo 0x0065 101 'e'
s const char* string (con virgolette) <location> "hello world" "hello world"
sb Stringa const char* (senza virgolette) <location> "hello world" hello world
s8 stringa UTF-8 <location> "This is a UTF-8 coffee cup â ̃•" "Questa è una tazza ☕ di caffè UTF-8 "
s8b Stringa UTF-8 (senza virgolette) <location> "hello world" hello world
su Stringa Unicode (codifica UTF-16) (tra virgolette) <location> L"hello world" L"hello world"

u"hello world"
secondario Stringa Unicode (codifica UTF-16) (senza virgolette) <location> L"hello world" hello world
bstr Stringa binaria BSTR (tra virgolette) <location> L"hello world" L"hello world"
env Blocco di ambiente (stringa con terminazione Null doppia) <location> L"=::=::\\" L"=::::\\\0=C:\\windows\\system32\0ALLU edizione Standard RSPROFILE=...
s32 Stringa UTF-32 (con virgolette) <location> U"hello world" u"hello world"
s32b stringa UTF-32 (senza virgolette) <location> U"hello world" hello world
en enum Saturday(6) Sabato
hv Tipo di puntatore: indica che il valore del puntatore in esame è il risultato dell'allocazione di heap di una matrice, ad esempio new int[3]. <location>{<first member>} <location>{<first member>, <second member>, ...}
na Elimina l'indirizzo di memoria di un puntatore a un oggetto. <location>, {member=value...} {member=value…}
nd Visualizza solo le informazioni sulla classe base, ignorando le classi derivate (Shape*) square include informazioni sulla classe base e sulle classi derivate Visualizza solo informazioni sulla classe base
ora HRESULT o codice di errore Win32. Questo identificatore non è più necessario per gli HRESULT perché il debugger li decodifica automaticamente. S_OK S_OK
wc flag della classe di finestre 0x0010 WC_DEFAULTCHAR
wm Numeri di messaggio Windows 16 WM_CLOSE
nr Elimina la voce "Visualizzazione non elaborata"
nvo Mostra l'elemento "Visualizzazione non elaborata" solo per i valori numerici
! formato non elaborato in cui vengono ignorate le personalizzazioni delle visualizzazioni del tipo di dati <rappresentazione personalizzata> 4
Gestire Visualizza informazioni sull'handle win32 0x000000000000009c Visualizza informazioni utili sull'handle, ad esempio l'ID del thread e così via.

Nota

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

Identificatori di dimensioni per puntatori quali matrici

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

Identificatore Formatta Valore dell'espressione di controllo 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 elementi bufferSize .
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 Formatta Valore dell'espressione di controllo originale Valore visualizzato
o intero ottale senza segno 0xF065 0170145
x

X
intero esadecimale 61541 0x0000f065
c Carattere singolo <location> 101 'e'
s const char* (con virgolette) <location> "hello world"
su const wchar_t*

const char16_t* (con virgolette)
<location> L"hello world"
secondario const wchar_t*

const char16_t*
<location> hello world
s8 const char* (con virgolette) <location> "hello world"
ora HRESULT o codice di errore Win32.
Questo identificatore non è più necessario per gli HRESULT perché il debugger li decodifica automaticamente.
S_OK S_OK
wc flag della classe di finestre 0x00000040, WC_DEFAULTCHAR
wm Numeri di messaggio Windows 0x0010 WM_CLOSE
! formato non elaborato, ignorando eventuali personalizzazioni della visualizzazione dei tipi di dati <rappresentazione personalizzata> 4

Gli identificatori d, e, f, g, h, i, l, m, ma, mb, md, mq, mu, mw e si specifica il codice nativo e C++/CLI richiede il debugger legacy, che non è 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 Formatta Valore dell'espressione di controllo originale Valore visualizzato
d

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

X
intero esadecimale 61541 0x0000f065
l

h
prefisso lungo o breve per: d, i, u, o, x, X 00406042 0x0c22
f virgola mobile signed (3./2.), f 1.500000
e notazione scientifica signed (3.0/2.0) 1.500000e+000
g notazione scientifica con segno a virgola mobile o firmata,
indipendentemente dal fatto che sia più breve
(3.0/2.0) 1,5
c Carattere singolo <location> 101 'e'
s const char* (con virgolette) <location> "hello world"
su const wchar_t*

const char16_t* (con virgolette)
<location> L"hello world"
secondario const wchar_t*

const char16_t*
<location> hello world
s8 const char* (con virgolette) <location> "hello world"
ora HRESULT o codice di errore Win32.
Questo identificatore non è più necessario per gli HRESULT perché il debugger li decodifica automaticamente.
S_OK S_OK
wc flag della classe di finestre 0x00000040, WC_DEFAULTCHAR
wm Numeri di messaggio 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. Gli identificatori della posizione di memoria possono essere usati 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.

Simbolo Formatta Valore dell'espressione di controllo originale Valore visualizzato
ma 64 caratteri ASCII 0x0012ffac 0x0012ffac .4...0...".0W&.......1W&.0.:W..1...."..1.JO&.1.2.."..1...0y....1
m 16 byte in formato esadecimale, seguiti 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 formato esadecimale, seguiti 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 parole quadruple 0x0012ffac 0x0012ffac 7ffdf00000000000 5f441a790012fdd4
mu caratteri da 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 è presente un puntatore a un oggetto che si vuole visualizzare come matrice, è possibile usare un numero intero per specificare il numero di elementi di matrice.

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