Compartir a través de


Especificadores de formato para C++ en el depurador de Visual Studio

Puede cambiar el formato en el que se muestra un valor en las ventanas Inspección, Automático y Variables locales mediante especificadores de formato.

También puede usar especificadores de formato en la ventana Inmediato y la ventana Comando, en puntos de seguimiento, e incluso en las ventanas de origen. Si hace una pausa sobre una expresión de esas ventanas, el resultado aparecerá en un cuadro desplegable de información sobre datos. La visualización de información sobre datos refleja el especificador de formato.

Nota

Cuando el depurador nativo de Visual Studio cambia a un nuevo motor de depuración, se agregan algunos especificadores de formato nuevos y se quitan otros antiguos. El depurador antiguo todavía se usa cuando se realiza depuración de interoperabilidad (administrada y nativa mixta) con C++/CLI.

Establecimiento de los especificadores de formato

Se usará el siguiente código de ejemplo:

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

Agregue la variable my_var1 a la ventana Inspección al depurar, Depurar>Ventanas>Inspección>Inspección 1. Después, haga clic con el botón derecho en la variable y seleccione Presentación hexadecimal. Ahora, en la ventana Inspección se muestra el valor 0x0065. Para ver este valor expresado como un carácter en lugar de un entero, primero haga clic con el botón derecho y anule la selección de Presentación hexadecimal. Luego, agregue el especificador de formato de carácter , c en la columna Nombre después del nombre de la variable. En la columna Valor se muestra ahora 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.

Puede ver una lista de especificadores de formato disponibles y seleccionar de dicha lista anexando una coma (,) al valor de la ventana Inspección.

WatchFormatSpecDropdown

Especificadores de formato

En las siguientes tablas se describen los especificadores de formato que se pueden usar en Visual Studio. Los especificadores en negrita solo se admiten para el nuevo depurador y no para la depuración de interoperabilidad con C++/CLI.

Especificador Formato Valor de inspección original Valor mostrado
d Entero decimal 0x00000066 102
o Entero octal sin signo 0x00000066 000000000146
x

h
entero hexadecimal 102 0xcccccccc
X

H
entero hexadecimal 102 0xcccccccc
xb

hb
entero hexadecimal (sin 0x inicial) 102 cccccccc
Xb

Hb
entero hexadecimal (sin 0x inicial) 102 CCCCCCCC
b entero binario sin signo 25 0b00000000000000000000000000011001
bb entero binario sin signo (sin 0b inicial) 25 00000000000000000000000000011001
h notación científica 25000000 2.500000e+07
e más corta, científica o de número de punto flotante 25000000 2.5e+07
c carácter único 0x0065 101 'e'
s const char* string (con comillas) <location> "hello world" "hola a todos"
sb Cadena const char* (sin comillas) <location> "hello world" hola a todos
s8 Cadena UTF-8 <location> "This is a UTF-8 coffee cup ☕" "This is a UTF-8 coffee cup ☕"
s8b Cadena UTF-8 (sin comillas) <location> "hello world" hola a todos
su Cadena Unicode (codificación UTF-16) (con comillas) <location> L"hello world" L"hola a todos"

u"hola a todos"
sub Cadena Unicode (codificación UTF-16; sin comillas) <location> L"hello world" hola a todos
bstr Cadena binaria BSTR (con comillas) <location> L"hello world" L"hola a todos"
env Bloque de entorno (cadena terminada en doble null) <location> L"=::=::\\" L"=::=::\\\0=C:=C:\\windows\\system32\0ALLUSERSPROFILE=...
s32 Cadena UTF-32 (con comillas) <location> U"hello world" u"hola a todos"
s32b cadena UTF-32 (sin comillas) <location> U"hello world" hola a todos
en enum Sábado(6) Sábado
hv Tipo de puntero: indica que el valor de puntero que se va a inspeccionar es el resultado de la asignación del montón de una matriz, por ejemplo, new int[3]. <location>{<first member>} <location>{<first member>, <second member>, ...}
na Suprime la dirección de memoria de un puntero a un objeto. <location>, {member=value...} {member=value…}
nd Muestra solo la información de la clase, omitiendo las clases derivadas (Shape*) square incluye la información de clase base y derivada Muestra únicamente la información de clase base
hr HRESULT o código de error Win32. Este especificador ya no es necesario para los valores HRESULT dado que el depurador los descodifica automáticamente. S_OK S_OK
wc Marcador de clase de ventana 0x0010 WC_DEFAULTCHAR
wm Números de mensajes de Windows 16 WM_CLOSE
nr Suprimir el elemento "Vista sin formato"
nvo Mostrar el elemento "Vista sin formato" solo para valores numéricos
! Sin formato, omite cualquier personalización de vistas de tipos de datos <representación personalizada> 4
handle Muestra información sobre el manipulador win32. 0x000000000000009c Muestra información útil sobre el manipulador, como el identificador de subproceso, etc.

Nota

Cuando el especificador de formato hv está presente, el depurador intenta determinar la longitud del búfer y muestra el número apropiado de elementos. Dado que el depurador no siempre puede averiguar el tamaño del búfer exacto de una matriz, debe usar un especificador de tamaño de (pBuffer,[bufferSize]) siempre que sea posible. El especificador de formato de hv es útil cuando el tamaño de búfer no está disponible fácilmente.

Especificadores de tamaño para punteros como matrices

Si tiene un puntero a un objeto que desea ver como una matriz, puede utilizar un entero o una expresión para especificar el número de elementos de matriz.

Especificador Formato Valor de inspección original Valor mostrado
n Entero decimal o hexadecimal pBuffer,[32]

pBuffer, [0x20]
Muestra pBuffer como una matriz de 32 elementos.
[exp] Expresión de C++ válida que se evalúa como un entero. pBuffer,[bufferSize] Muestra pBuffer como una matriz de bufferSize elementos.
expand(n) Expresión de C++ válida que se evalúa como un entero pBuffer, expand(2) Muestra el tercer elemento de pBuffer

Especificadores de formato para la depuración de interoperabilidad con C++/CLI

Especificador Formato Valor de inspección original Valor mostrado
o Entero octal sin signo 0xF065 0170145
x

X
entero hexadecimal 61541 0x0000f065
c carácter único <ubicación> 101 'e'
s const char* (con comillas) <ubicación> "hola a todos"
su const wchar_t*

const char16_t* (con comillas)
<ubicación> L"hola a todos"
sub const wchar_t*

const char16_t*
<ubicación> hola a todos
s8 const char* (con comillas) <ubicación> "hola a todos"
hr HRESULT o código de error Win32.
Este especificador ya no es necesario para los valores HRESULT dado que el depurador los descodifica automáticamente.
S_OK S_OK
wc Marcador de clase de ventana 0x00000040, WC_DEFAULTCHAR
wm Números de mensajes de Windows 0x0010 WM_CLOSE
! sin formato, omite cualquier personalización de vistas de tipos de datos <representación personalizada> 4

Los especificadores d, e, f, g, h, i, l, m, ma, mb, md, mq, mu, mw y u para el código nativo y C++/CLI requerían el depurador heredado, que no se admite en Visual Studio 2022 ni versiones posteriores.

Los especificadores en negrita solo son compatibles con la depuración nativa y con el código C++/CLI. Estos especificadores requieren el depurador heredado, especificado mediante el uso del modo de compatibilidad administrado.

Especificador Formato Valor de inspección original Valor mostrado
d

i
Entero decimal con signo 0xF000F065 -268373915
u Entero decimal sin signo 0x0065 101
o Entero octal sin signo 0xF065 0170145
x

X
entero hexadecimal 61541 0x0000f065
l

h
Prefijo long o short para: d, i, u, o, x, X 00406042 0x0c22
f Punto flotante con signo (3./2.), f 1.500000
e Notación científica con signo (3.0/2.0) 1.500000e+000
g punto flotante con signo o notación científica con signo,
lo que sea más corto
(3.0/2.0) 1.5
c carácter único <ubicación> 101 'e'
s const char* (con comillas) <ubicación> "hola a todos"
su const wchar_t*

const char16_t* (con comillas)
<ubicación> L"hola a todos"
sub const wchar_t*

const char16_t*
<ubicación> hola a todos
s8 const char* (con comillas) <ubicación> "hola a todos"
hr HRESULT o código de error Win32.
Este especificador ya no es necesario para los valores HRESULT dado que el depurador los descodifica automáticamente.
S_OK S_OK
wc Marcador de clase de ventana 0x00000040, WC_DEFAULTCHAR
wm Números de mensajes de Windows 0x0010 WM_CLOSE
! sin formato, omite cualquier personalización de vistas de tipos de datos <representación personalizada> 4

Especificadores de formato para ubicaciones de memoria en la depuración de interoperabilidad con C++/CLI

En la siguiente tabla se describen los símbolos de formato que se utilizan en las ubicaciones de memoria. Puede utilizar un especificador de ubicación de memoria con cualquier valor o expresión que se evalúe como una ubicación.

Los especificadores en negrita solo son compatibles con la depuración nativa y con el código C++/CLI. Esto requiere el depurador heredado, especificado mediante el uso del modo de compatibilidad administrado.

Símbolo Formato Valor de inspección original Valor mostrado
ma 64 caracteres ASCII 0x0012ffac 0x0012ffac .4...0...".0W&.......1W&.0.:W..1...."..1.JO&.1.2.."..1...0y....1
m 16 bytes en hexadecimal, seguidos de 16 caracteres ASCII 0x0012ffac 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&.
mb 16 bytes en hexadecimal, seguidos de 16 caracteres ASCII 0x0012ffac 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&.
mw 8 palabras 0x0012ffac 0x0012ffac 34B3 00CB 3084 8094 22FF 308A 2657 0000
md 4 palabras dobles 0x0012ffac 0x0012ffac 00CB34B3 80943084 308A22FF 00002657
mq 2 palabras cuádruples 0x0012ffac 0x0012ffac 7ffdf00000000000 5f441a790012fdd4
mu Caracteres de 2 bytes (Unicode) 0x0012ffac 0x0012ffac 8478 77f4 ffff ffff 0000 0000 0000 0000

Especificador de tamaño para punteros como matrices en la depuración de interoperabilidad con C++/CLI

Si tiene un puntero a un objeto que desea ver como una matriz, puede utilizar un entero para especificar el número de elementos de matriz.

Especificador Formato Expresión Valor mostrado
n Entero decimal pBuffer[32] Muestra pBuffer como una matriz de 32 elementos.