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, la ventana Comandos, en puntos de traza e incluso en ventanas del código fuente. Si pausas una expresión en esas ventanas, el resultado aparece en un DataTip. El visualizador DataTip refleja el especificador de formato.

Nota:

Cuando el depurador nativo de Visual Studio cambió a un nuevo motor de depuración, se agregaron algunos especificadores de formato nuevos y se quitaron algunos antiguos. El depurador anterior todavía se usa cuando se realiza la depuración de interoperabilidad (combinada nativa y administrada) con C++/CLI.

Establecer especificadores de formato

Usaremos el código de ejemplo siguiente:

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

Agregue la my_var1 variable a la ventana Inspección durante la depuración, Depurar> inspección deWindows>Watch>1. A continuación, haga clic con el botón derecho en la variable y seleccione Mostrar hexadecimal. Ahora, la ventana Inspección 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 pantalla hexadecimal. A continuación, agregue el especificador de formato de caracteres , c en la columna Nombre después del nombre de la variable. La columna Valor muestra ahora 101 'e'.

Captura de pantalla de la ventana de Inspección de Visual Studio con una línea seleccionada que muestra my_var1.c con un valor de 101

Puede ver y seleccionar de una lista de especificadores de formato disponibles añadiendo una coma (,) al valor en la ventana Inspección.

WatchFormatSpecDropdown

Especificadores de formato

En las tablas siguientes se describen los especificadores de formato que puede 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 vigilancia original Valor mostrado
d número entero 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
e notación científica 25000000 2.500000e+07
g más corto de punto flotante o científico 25000000 2.5e+07
c carácter único 0x0065 101 'e'
s cadena const char* (con comillas) <ubicación> "hola mundo" "Hola mundo"
Sb cadena const char* (sin comillas) <ubicación> "hola mundo" Hola mundo
s8 Cadena UTF-8 <ubicación> "Esta es una taza de café UTF-8 ☕" "Esta es una taza ☕ de café UTF-8 "
s8b Cadena UTF-8 (sin comillas) <ubicación> "hola mundo" Hola mundo
su Cadena Unicode (codificación UTF-16) (con comillas) <location> L"hola mundo" L"hola mundo"

u"hola mundo"
submarino Cadena Unicode (codificación UTF-16) (sin comillas) <location> L"hola mundo" Hola mundo
bstr Cadena binaria BSTR (con comillas) <location> L"hola mundo" L"hola mundo"
Entorno Bloque de entorno (cadena con doble terminación NULL) <ubicación> L"=::=::\\" L"=::=::\\\0=C:=C:\\windows\\system32\0ALLUSERSPROFILE=...
s32 Cadena UTF-32 (con comillas) <ubicación> U"hello world" U"hola mundo"
s32b Cadena UTF-32 (sin comillas) <location> U"hello world" Hola mundo
en enum Sábado(6) Sábado
Hv Tipo de puntero: indica que el valor de puntero que se está inspeccionando es el resultado de la asignación del montón de una matriz, por ejemplo, new int[3]. <ubicación>{<primer miembro>} <ubicación>{<primer miembro>, <segundo miembro>, ...}
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 base, ignorando las clases derivadas. (Shape*) square incluye información de clase base y clase derivada Muestra solo información de clase base
h Código de error HRESULT o Win32. Este especificador ya no es necesario para HRESULT, ya que el depurador los descodifica automáticamente. S_OK S_OK
WC Bandera de clase de ventana 0x0010 WC_DEFAULTCHAR
wm Números de mensaje de Windows 16 WM_CLOSE
Nr Suprimir el elemento "Vista en bruto"
nvo Mostrar el elemento "Vista sin procesar" solo para valores numéricos
! formato bruto, omitiendo las personalizaciones de las vistas de tipo de datos <representación personalizada> 4
asa Muestra información sobre el identificador win32 0x000000000000009c Muestra información útil sobre el handle, 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 mostrar ese número de elementos. Dado que no siempre es posible que el depurador encuentre el tamaño exacto del búfer de una matriz, debe usar un especificador (pBuffer,[bufferSize]) de tamaño siempre que sea posible. El especificador de formato hv es útil cuando el tamaño del 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 usar un entero o una expresión para especificar el número de elementos de matriz.

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

pBuffer,[0x20]
Se muestra pBuffer como una matriz de 32 elementos.
[exp] Expresión válida de C++ 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 vigilancia 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 mundo"
su const wchar_t*

const char16_t* (con comillas)
<ubicación> L"hola mundo"
submarino const wchar_t*

const char16_t*
<ubicación> Hola mundo
s8 const char* (con comillas) <ubicación> "Hola mundo"
h Código de error HRESULT o Win32.
Este especificador ya no es necesario para HRESULT, ya que el depurador los descodifica automáticamente.
S_OK S_OK
WC Bandera de clase de ventana 0x00000040, WC_DEFAULTCHAR
wm Números de mensaje de Windows 0x0010 WM_CLOSE
! formato bruto, omitiendo las personalizaciones de la vista 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 código nativo y C++/CLI requirieron el depurador heredado, el cual no es compatible con Visual Studio 2022 o versiones posteriores.

Los especificadores en negrita solo se admiten para depurar código nativo y C++/CLI. Estos especificadores requieren el depurador heredado, especificado mediante el modo de compatibilidad administrada.

Especificador Formato Valor de vigilancia 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 largo o corto para: d, i, u, o, x, X 00406042 0x0c22
f punto flotante firmado (3./2.), f 1.500000
e notación científica firmada (3.0/2.0) 1.5000000e+000
g signo de punto flotante o notación científica firmada,
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 mundo"
su const wchar_t*

const char16_t* (con comillas)
<ubicación> L"hola mundo"
submarino const wchar_t*

const char16_t*
<ubicación> Hola mundo
s8 const char* (con comillas) <ubicación> "Hola mundo"
h Código de error HRESULT o Win32.
Este especificador ya no es necesario para HRESULT, ya que el depurador los descodifica automáticamente.
S_OK S_OK
WC Bandera de clase de ventana 0x00000040, WC_DEFAULTCHAR
wm Números de mensaje de Windows 0x0010 WM_CLOSE
! formato bruto, omitiendo las personalizaciones de la vista 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 tabla siguiente se describen los símbolos de formato usados para las ubicaciones de memoria. Puede usar 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 se admiten para depurar código nativo y C++/CLI. Esto requiere el depurador heredado, especificado mediante el modo de compatibilidad administrada.

Símbolo Formato Valor de vigilancia original Valor mostrado
mamá 64 caracteres ASCII 0x0012ffac 0x0012ffac .4...0...".0W&.......1W&.0.:W..1...."..1.JO&.1.2.."..1...0y....1
m 16 bytes en hexadecimal, seguido 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, seguido 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 cuadrapalabras 0x0012ffac 0x0012ffac 7ffdf0000000000000 5f441a790012fdd4
mu Caracteres de 2 bytes (Unicode) 0x0012ffac 0x0012ffac 8478 77f4 ffff ffff 0000 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 usar un entero para especificar el número de elementos de matriz.

Especificador Formato Expression Valor mostrado
n Entero decimal pBuffer[32] Se muestra pBuffer como una matriz de 32 elementos.