Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
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'.
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.
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. |