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'.
È possibile visualizzare e selezionare da un elenco di identificatori di formato disponibili aggiungendo una virgola (,) al valore nella finestra Espressione di controllo .
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. |