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

Vous pouvez modifier le format dans lequel une valeur est affichée dans les fenêtres Espion, Automatique et Variables locales à l’aide de spécificateurs de format.

Vous pouvez également utiliser des spécificateurs de format dans la fenêtre Exécution, la fenêtre Commande, dans points de trace et même les fenêtres sources. Si vous effectuez une suspension sur une expression dans ces fenêtres, le résultat apparaît dans un DataTip. L’affichage du DataTip reflète le spécificateur de format.

Notes

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

Définir les 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 variable my_var1 dans la fenêtre Espion pendant le débogage, Déboguer>Fenêtres>Espion>Espion 1. Ensuite, cliquez avec le bouton droit sur la variable et sélectionnez Affichage hexadécimal. La fenêtre Espion indique à présent la valeur 0x0065. Pour voir cette valeur exprimée sous la forme d’un caractère plutôt que d’un entier, commencez par cliquer avec le bouton droit et désélectionnez Affichage hexadécimal. Ajoutez ensuite le spécificateur de format de caractères , c dans la colonne Nom après le nom de la variable. La colonne Valeur affiche désormais 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.

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

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 d’espion 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 au début) 102 cccccccc
Xb

Hb
Entier hexadécimal (sans 0x au début) 102 CCCCCCCC
b Entier binaire non signé 25 0b00000000000000000000000000011001
bb entier binaire non signé (sans 0b au début) 25 00000000000000000000000000011001
e Notation scientifique 25000000 2,500000e+07
g Forme courte de la notation scientifique ou virgule flottante 25000000 2,5e+07
c caractère unique 0x0065 101 ’e’
s const char* string (avec guillemets) <emplacement> "hello world" « Hello World »
sb const char* chaîne (sans guillemets) <emplacement> "hello world" hello world
s8 Chaîne UTF-8 <emplacement> "Ceci est une tasse de café UTF-8 ☕" "Ceci est une tasse de café UTF-8 ☕"
s8b chaîne UTF-8 (sans guillemets) <emplacement> "hello world" hello world
su chaîne Unicode (encodage UTF-16) (avec guillemets) <emplacement> L"hello world" L"hello world"

u"hello world"
sub chaîne Unicode (encodage UTF-16) (sans guillemets) <emplacement> L"hello world" hello world
bstr chaîne binaire BSTR (avec guillemets) <emplacement> L"hello world" L"hello world"
env Bloc d’environnement (chaîne finissant par une double valeur null) <emplacement> L"=::=::\\" L"=::=::\\\0=C:=C:\\windows\\system32\0ALLUSERSPROFILE=...
s32 chaîne UTF-32 (avec guillemets) <emplacement> U"hello world" u"hello world"
s32b chaîne UTF-32 (sans guillemets) <emplacement> U"hello world" hello world
en enum Saturday(6) Samedi
hv Type de pointeur : indique que la valeur de pointeur inspectée est le résultat de l’allocation de tas d’un tableau, par exemple, new int[3]. <emplacement>{<premier membre>} <emplacement>{<premier membre>, <deuxième membre>, ...}
na Supprime l’adresse mémoire d’un pointeur vers un objet. <location>, {membre=valeur...} {membre=valeur…}
nd Affiche uniquement les informations de classe de base, en ignorant les classes dérivées (Shape*) square inclut les informations de classe de base et de classe dérivée Affiche uniquement les informations de classe de base
heure(s) HRESULT ou code d’erreur Win32. Ce spécificateur n’est plus nécessaire pour les HRESULT, car le débogueur les décode automatiquement. S_OK S_OK
wc Indicateur de classe de fenêtre 0x0010 WC_DEFAULTCHAR
wm Numéros de messages 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 toutes les personnalisations d’affichage de type de données <représentation personnalisée> 4
handle Affiche des informations sur le handle win32 0x000000000000009c Affiche des informations utiles sur le handle, telles que l’ID de thread, etc.

Notes

Quand 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. Comme il n’est pas toujours possible pour le débogueur de rechercher la taille exacte de la mémoire tampon d’un tableau, vous devez utiliser un spécificateur de taille (pBuffer,[bufferSize]) chaque fois que cela est possible. Le spécificateur de format hv est utile quand la taille de la mémoire tampon n’est pas immédiatement disponible.

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

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

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

pBuffer,[0x20]
Affiche pBuffer sous forme d’un tableau de 32 éléments.
[exp] Expression C++ valide qui correspond à un entier. pBuffer,[bufferSize] Affiche pBuffer sous forme d’un tableau d’éléments bufferSize .
expand(n) Expression C++ valide qui correspond à 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 d’espion d’origine Valeur affichée
o entier octal non signé 0xF065 0170145
x

X
entier hexadécimal 61541 0x0000f065
c caractère unique <location> 101 ’e’
s const char* (avec guillemets) <location> « Hello World »
su const wchar_t*

const char16_t* (avec guillemets)
<location> L"hello world"
sub const wchar_t*

const char16_t*
<location> hello world
s8 const char* (avec guillemets) <location> « Hello World »
heure(s) HRESULT ou code d’erreur Win32.
Ce spécificateur n’est plus nécessaire pour les HRESULT, car le débogueur les décode automatiquement.
S_OK S_OK
wc Indicateur de classe de fenêtre 0x00000040, WC_DEFAULTCHAR
wm Numéros de messages Windows 0x0010 WM_CLOSE
! format brut, ignorant toutes les personnalisations d’affichage de type de données <représentation personnalisée> 4

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

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

Spécificateur Format Valeur d’espion 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,
selon celui qui est le plus court
(3.0/2.0) 1.5
c caractère unique <location> 101 ’e’
s const char* (avec guillemets) <location> « Hello World »
su const wchar_t*

const char16_t* (avec guillemets)
<location> L"hello world"
sub const wchar_t*

const char16_t*
<location> hello world
s8 const char* (avec guillemets) <location> « Hello World »
heure(s) HRESULT ou code d’erreur Win32.
Ce spécificateur n’est plus nécessaire pour les HRESULT, car le débogueur les décode automatiquement.
S_OK S_OK
wc Indicateur de classe de fenêtre 0x00000040, WC_DEFAULTCHAR
wm Numéros de messages Windows 0x0010 WM_CLOSE
! format brut, ignorant toutes les personnalisations d’affichage 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 contient 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 correspondant à un emplacement.

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

Symbole Format Valeur d’espion 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&.
mb 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 mots quadruples 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 le débogage d’interopérabilité avec C++/CLI

Si vous avez un pointeur vers un objet que vous voulez afficher sous forme de tableau, vous pouvez utiliser un entier pour spécifier le nombre d’éléments du tableau.

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