Partager via


Spécificateurs de format pour C++ dans le débogueur Visual Studio

Vous pouvez modifier le format dans lequel une valeur s’affiche dans les fenêtres Watch, Autos et Locals à l’aide de spécificateurs de format.

Vous pouvez également utiliser des spécificateurs de format dans la fenêtre Immédiate, la fenêtre Commande, dans les tracepoints et même dans les fenêtres source. Si vous placez le curseur sur une expression dans ces fenêtres, le résultat apparaît dans un DataTip. L’affichage DataTip reflète le spécificateur de format.

Note

Lorsque le débogueur natif Visual Studio est passé à un nouveau moteur de débogage, certains spécificateurs de format ont été ajoutés et certains anciens ont été supprimés. L’ancien débogueur est toujours utilisé lorsque vous effectuez un débogage interop (natif mixte et managé) avec C++/CLI.

Définir des spécificateurs de format

Nous allons utiliser l’exemple de code suivant :

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

Ajoutez la my_var1 variable dans la fenêtre Observateur pendant le débogage, Déboguez>Windows>Observateur>Watch 1. Ensuite, cliquez avec le bouton droit sur la variable et sélectionnez Affichage hexadécimal. À présent, la fenêtre Espion affiche la valeur 0x0065. Pour afficher cette valeur exprimée sous la forme d’un caractère plutôt qu’un entier, commencez par cliquer avec le bouton droit et désélectionnez l’affichage hexadécimal. Ajoutez ensuite le spécificateur de format de caractère , c dans la colonne Name après le nom de la variable. La colonne Valeur affiche maintenant 101 'e'.

Capture d’écran de la fenêtre Visual Studio Watch avec une ligne sélectionnée qui montre my_var1.c avec la valeur 101 « e » et un type d’int.

Vous pouvez afficher et sélectionner à partir d'une liste de spécificateurs de format disponibles en ajoutant une virgule (,) à la valeur dans la fenêtre Watch.

WatchFormatSpecDropdown

Spécificateurs de format

Les tableaux suivants décrivent les spécificateurs de format que vous pouvez utiliser dans Visual Studio. Les spécificateurs en gras sont uniquement pris en charge pour le nouveau débogueur, et non pour le débogage d’interopérabilité avec C++/CLI.

Spécificateur Format Valeur de montre d’origine Valeur affichée
d entier décimal 0x00000066 102
o entier octal non signé 0x00000066 000000000146
x

h
entier hexadécimal 102 0xcccccccc
X

H
entier hexadécimal 102 0xCCCCCCCC
Xb

Hb
entier hexadécimal (sans 0x de début) 102 cccccccccc
Xb

Hb
entier hexadécimal (sans 0x de début) 102 CCCCCCCC
b entier binaire non signé 25 0b00000000000000000000000000011001
Bb entier binaire non signé (sans 0b de début) 25 00000000000000000000000000011001
e notation scientifique 25000000 2.500000e+07
g plus court de point scientifique ou à virgule flottante 25000000 2.5e+07
c caractère unique 0x0065 101 'e'
s chaîne const char* (avec guillemets) <emplacement> « hello world » « hello world »
Sb chaîne const char* (pas de guillemets) <emplacement> « bonjour le monde » Salut tout le monde
s8 Chaîne UTF-8 <location> « C’est une tasse de café UTF-8 â ̃• » « C’est une tasse ☕ de café UTF-8 »
s8b Chaîne UTF-8 (pas de guillemets) <emplacement> « hello world » Salut tout le monde
su Chaîne Unicode (encodage UTF-16) (avec guillemets) <location> L« hello world » L"hello world »

« bonjour le monde »
sous Chaîne Unicode (encodage UTF-16) (pas de guillemets) <location> L« hello world » Salut tout le monde
bstr Chaîne binaire BSTR (avec guillemets) <location> L« hello world » L"hello world »
environnement Bloc d’environnement (chaîne terminée par deux caractères nuls) <location> L"=::=::\" L"= ::= :\\\0=C :=C :\\windows\\system32\0ALLUSERSPROFILE=...
s32 Chaîne UTF-32 (avec guillemets) <location> U« hello world » U« hello world »
s32b Chaîne UTF-32 (pas de guillemets) <location> U« hello world » Salut tout le monde
en enum Samedi(6) Samedi
Hv Type de pointeur : indique que la valeur de pointeur en cours d’inspection est le résultat de l’allocation de tas d’un tableau, par exemple new int[3]. <location>{<premier membre>} <location>{<premier membre>, <deuxième membre>, ...}
na Supprime l’adresse mémoire d’un pointeur vers un objet. <location>, {member=value...} {member=value...}
Nd Affiche uniquement les informations de classe de base, ignorant les classes dérivées (Shape*) square inclut des informations sur la classe de base et les classes dérivées Affiche uniquement les informations de classe de base
rh Code d’erreur HRESULT ou Win32. Ce spécificateur n’est plus nécessaire pour les HRESULT, car le débogueur les décode automatiquement. S_OK S_OK
toilette Indicateur de classe fenêtre 0x0010 WC_DEFAULTCHAR
wm Numéros de message Windows 16 WM_CLOSE
Nr Supprimer l’élément « Affichage brut »
nvo Afficher l’élément « Affichage brut » pour les valeurs numériques uniquement
! format brut, ignorant les personnalisations des vues de type de données <Représentation personnalisée> 4
manche Affiche des informations sur le handle win32 0x000000000000009c Affiche des informations utiles sur le handle, telles que l’ID de thread, etc.

Note

Lorsque le spécificateur de format hv est présent, le débogueur tente de déterminer la longueur de la mémoire tampon et d’afficher ce nombre d’éléments. Étant donné qu’il n’est pas toujours possible pour le débogueur de trouver la taille exacte de la mémoire tampon d’un tableau, vous devez utiliser un spécificateur (pBuffer,[bufferSize]) de taille dans la mesure du possible. Le spécificateur de format hv est utile lorsque la taille de la mémoire tampon n’est pas facilement disponible.

Spécificateurs de taille pour les pointeurs en tant que tableaux

Si vous avez un pointeur vers un objet que vous souhaitez afficher en tant que tableau, vous pouvez utiliser un entier ou une expression pour spécifier le nombre d’éléments de tableau.

Spécificateur Format Valeur de montre d’origine Valeur affichée
n Entier décimal ou hexadécimal pBuffer,[32]

pBuffer,[0x20]
Affiche pBuffer sous forme de tableau d’éléments 32.
[exp] Expression C++ valide qui prend la valeur d’un entier. pBuffer,[bufferSize] Affiche pBuffer en tant que tableau d’éléments bufferSize .
expand(n) Expression C++ valide qui prend la valeur d’un entier pBuffer, expand(2) Affiche le troisième élément de pBuffer

Spécificateurs de format pour le débogage d’interopérabilité avec C++/CLI

Spécificateur Format Valeur de montre d’origine Valeur affichée
o entier octal non signé 0xF065 0170145
x

X
Entier hexadécimal 61541 0x0000f065
c caractère unique <emplacement> 101 'e'
s const char* (avec guillemets) <emplacement> « hello world »
su const wchar_t*

const char16_t* (avec guillemets)
<emplacement> L"hello world »
sous const wchar_t*

const char16_t*
<emplacement> Salut tout le monde
s8 const char* (avec guillemets) <emplacement> « hello world »
rh Code d’erreur HRESULT ou Win32.
Ce spécificateur n’est plus nécessaire pour les HRESULT, car le débogueur les décode automatiquement.
S_OK S_OK
toilette Indicateur de classe fenêtre 0x00000040, WC_DEFAULTCHAR
wm Numéros de message Windows 0x0010 WM_CLOSE
! format brut, en ignorant les personnalisations des vues de type de données <Représentation personnalisée> 4

D, e, f, g, h, i, l, m, ma, mb, md, mq, mu, mw, et u sont des spécificateurs pour le code natif et C++/CLI nécessitant le débogueur hérité, qui n'est pas pris en charge dans Visual Studio 2022 ou les versions ultérieures.

Les spécificateurs en gras sont pris en charge uniquement pour le débogage du code natif et C++/CLI. Ces spécificateurs nécessitent le débogueur hérité, spécifié à l’aide du mode de compatibilité managée.

Spécificateur Format Valeur de montre d’origine Valeur affichée
d

i
entier décimal signé 0xF000F065 -268373915
u entier décimal non signé 0x0065 101
o entier octal non signé 0xF065 0170145
x

X
Entier hexadécimal 61541 0x0000f065
l

h
préfixe long ou court pour : d, i, u, o, x, X 00406042 0x0c22
f virgule flottante signée (3./2.), f 1.500000
e notation scientifique signée (3.0/2.0) 1,500000e+000
g virgule flottante signée ou notation scientifique signée,
quelle que soit la plus courte
(3.0/2.0) 1,5
c caractère unique <emplacement> 101 'e'
s const char* (avec guillemets) <emplacement> « hello world »
su const wchar_t*

const char16_t* (avec guillemets)
<emplacement> L"hello world »
sous const wchar_t*

const char16_t*
<emplacement> Salut tout le monde
s8 const char* (avec guillemets) <emplacement> « hello world »
rh Code d’erreur HRESULT ou Win32.
Ce spécificateur n’est plus nécessaire pour les HRESULT, car le débogueur les décode automatiquement.
S_OK S_OK
toilette Indicateur de classe fenêtre 0x00000040, WC_DEFAULTCHAR
wm Numéros de message Windows 0x0010 WM_CLOSE
! format brut, en ignorant les personnalisations des vues de type de données <Représentation personnalisée> 4

Spécificateurs de format pour les emplacements de mémoire dans le débogage d’interopérabilité avec C++/CLI

Le tableau suivant décrit les symboles de mise en forme utilisés pour les emplacements de mémoire. Vous pouvez utiliser un spécificateur d’emplacement de mémoire avec n’importe quelle valeur ou expression qui se résolvent en un emplacement.

Les spécificateurs en gras sont pris en charge uniquement pour le débogage du code natif et C++/CLI. Cela nécessite le débogueur hérité, spécifié à l’aide du mode de compatibilité managée.

Symbol Format Valeur de montre d’origine Valeur affichée
ma 64 caractères ASCII 0x0012ffac 0x0012ffac .4...0...". 0W&....... 1W&.0. :W.. 1....".. 1.JO&.1.2..".. 1...0y.... 1
m 16 octets en hexadécimal, suivis de 16 caractères ASCII 0x0012ffac 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0..." 0W&..
Mo 16 octets en hexadécimal, suivis de 16 caractères ASCII 0x0012ffac 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0..." 0W&..
mw 8 mots 0x0012ffac 0x0012ffac 34B3 00CB 3084 8094 22FF 308A 2657 0000
md 4 mots doubles 0x0012ffac 0x0012ffac 00CB34B3 80943084 308A22FF 00002657
mq 2 quadwords 0x0012ffac 0x0012ffac 7ffdf00000000000 5f441a790012fdd4
mu Caractères de 2 octets (Unicode) 0x0012ffac 0x0012ffac 8478 77f4 ffff ffff 0000 0000 0000 0000

Spécificateur de taille pour les pointeurs en tant que tableaux dans l'interopérabilité au sein du débogage avec C++/CLI

Si vous avez un pointeur vers un objet que vous souhaitez afficher en tant que tableau, vous pouvez utiliser un entier pour spécifier le nombre d’éléments de tableau.

Spécificateur Format Expression Valeur affichée
n Entier décimal pBuffer[32] Affiche pBuffer sous la forme d’un tableau de 32 éléments.