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) <ubicazione> "ciao mondo" ciao mondo
Sb const char* string (senza virgolette) <location> "hello world" 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"hello world" Salve, mondo
bstr Stringa binaria BSTR (tra virgolette) <location> L"Ciao mondo" 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"ciao mondo" 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, espandere(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.

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.