Compartilhar via


Especificadores de formato em C++

Ao depurar código nativo na janela Inspeção ou na caixa de diálogo QuickWatch, você altera o formato no qual um valor é exibido usando especificadores de formato.

(A maioria dos especificadores de formato é somente para código nativo, mas o Visual C# tem um conjunto limitado de especificadores de formato. Consulte Especificadores de formato em C#.)

Você também pode usar especificadores de formato na janela Imediato, na janela Comando e até mesmo em janelas de fonte. Se você pausar em uma expressão nessas janelas, o resultado aparecerá em uma DataTip. As DataTips refletirão o especificador de formato na tela DataTip.

Dica

O depurador nativo do Visual Studio mudou para um novo mecanismo de depuração.Nessa alteração, foi incluída a adição de alguns novos especificadores de formato e a remoção de alguns antigos.A transição não está concluída, e o depurador antigo ainda é usado quando você faz a depuração interop (nativa e gerenciada combinadas) com o C++/CLI e quando você depura usando Editar e Continuar do C++.As seções neste tópico mostram os especificadores de formato para cada mecanismo de depuração.

  • Especificadores de formato do Visual Studio 2012 descreve os especificadores de formato no novo mecanismo de depuração.

  • Especificadores de formato para depuração interop e Editar e Continuar do C++ descreve os especificadores de formato no mecanismo de depuração antigo.

Conteúdo

Exemplo

Especificadores de formato do Visual Studio 2012

  • Especificadores de tamanho para ponteiros como matrizes no Visual Studio 2012

Especificadores de formato para depuração interop e em Editar e Continuar do C++

  • Locais de memória de especificadores de formato em depuração interop e em Editar e Continuar do C++

  • Especificador de tamanho para ponteiros como matrizes na depuração interop e em Editar e Continuar do C++

Exemplo

Suponha que nVar seja uma variável de inteiro e a janela Inspeção mostre que ela contém o valor 0x0065. Para exibir o valor expresso como um caractere em vez de um inteiro, na coluna Nome, após o nome de variável, adicione o especificador de formato de caractere, c:

Em vez do valor inteiro 0x0065, a coluna Valor agora exibirá o valor do caractere, 101 'e'.

Se você deseja aplicar um especificador de formato a elementos de uma matriz ou a membros de um objeto, deve aplicá-lo diretamente a cada elemento ou membro. Você não pode aplicá-lo à matriz ou ao objeto como um todo. Por exemplo, suponha que você tenha uma matriz nArray e deseje ver os quatro primeiros elementos em formato de caracteres. Você deve incorporar essas expressões na janela Inspeção:

nArray[0],c
nArray[1],c
nArray[2],c
nArray[3],c

Especificadores de formato do Visual Studio 2012

As tabelas a seguir mostram os especificadores de formato que podem ser usados no Visual Studio 2012 quando você não estiver realizando depuração interop (nativa e gerenciada) de código com o C++/CLI ou usando Editar e Continuar do C++.

Os especificadores em negrito não têm suporte para depuração interop com C++/CLI ou para depuração com Editar e Continuar do C++.

Especificador

Formato

Expressão

Valor exibido

d

inteiro decimal

0xF000F065, d

-268373915

o

inteiro octal não assinado

0xF065, o

0170145

x

h

Inteiro hexadecimal

61546, x

61541, h

0x0000f06a

X

H

Inteiro hexadecimal

61541, X

61546, H

0x0000F06A

c

Caractere único

0x0065, c

101 'e'

s

Cadeia de caracteres ASCII

0x0012fde8, s

"Hello World!"

sb

Cadeia de caracteres ASCII

0x0012fde8, sb

Hello world

su

Cadeia de caracteres Unicode

0x0012fde8, su

L"Hello world"

sub

Cadeia de caracteres Unicode

0x0012fde8, sub

Hello world

s8

Cadeia de caracteres UTF-8

0x0012fde8, s8

"Hello World!"

s8b

Cadeia de caracteres UTF-8

0x0012fde8, s8b

Hello world

bstr

Cadeia de caracteres BSTR

0x0032fe8, bstr

Olá

, na

&myGlobal, n

winmain, na

O endereço do ponteiro não é exibido.

nd

pb,nd

Exibe somente as informações da classe base de pb, ignorando as classes derivadas

hr

Código de erro HRESULT ou Win32. (O depurador agora decodifica HRESULTs automaticamente. Portanto, esse especificador não é necessário nesses casos.

0x00000000L, hr

S_OK

wc

Sinalizador de classe do Windows.

0x00000040, wc

WC_DEFAULTCHAR

wm

Números de mensagens do Windows

0x0010, wm

WM_CLOSE

!

formato bruto, ignorando qualquer personalização de exibições de tipo de dados

i !

4

Especificadores de tamanho para ponteiros como matrizes no Visual Studio 2012

Se você tiver um ponteiro para um objeto que queira exibir como uma matriz, pode usar um inteiro ou uma expressão para especificar o número de elementos da matriz:

Especificador

Formato

Expressão

Valor exibido

n

Inteiro decimal ou hexadecimal

pBuffer,[32]

pBuffer,[0x20]

Exibe pBuffer como uma matriz de 32 elementos.

[exp]

Uma expressão C++ válida que é avaliada como um inteiro.

pBuffer,[bufferSize]

Avalia bufferSize e exibe pBuffer como uma matriz do número de elementos avaliado.

expand(n)

pBuffer, expand(1,2)

Exibe o terceiro filho do segundo filho de pBuffer

Os especificadores de formato para depuração interop com C++/CLI ou Editar e Continuar do C++

Especificadores em negrito têm suporte apenas para depuração de códigos nativos e C++/CLI e para depuração com Editar e Continuar do C++.

Especificador

Formato

Expressão

Valor exibido

d,i

inteiro decimal assinado

0xF000F065, d

-268373915

u

inteiro decimal não assinado

0x0065, u

101

o

inteiro octal não assinado

0xF065, o

0170145

x,X

Inteiro hexadecimal

61541, x

0x0000f065

l,h

prefixo longo ou curto para: d, i, u, o, x, X

00406042,hx

0x0c22

f

ponto flutuante assinado

(3./2.), f

1.500000

e

notação científica assinada

(3./2.), e

1.500000e+000

g

ponto flutuante assinado ou notação científica assinada, o que for menor

(3./2.), g

1.5

c

Caractere único

0x0065, c

101 'e'

s

Cadeia de caracteres

0x0012fde8, s

"Hello World!"

su

Cadeia de caracteres Unicode

0x0012fde8, su

L"Hello world"

sub

Cadeia de caracteres Unicode

0x0012fde8, sub

Hello world

s8

Cadeia de caracteres UTF-8

0x0012fde8, s8

"Hello World!"

hr

Código de erro HRESULT ou Win32. (O depurador agora decodifica HRESULTs automaticamente. Portanto, esse especificador não é necessário nesses casos.

0x00000000L, hr

S_OK

wc

Sinalizador de classe do Windows.

0x00000040, wc

WC_DEFAULTCHAR

wm

Números de mensagens do Windows

0x0010, wm

WM_CLOSE

!

formato bruto, ignorando qualquer personalização de exibições de tipo de dados

i !

4

Locais de memória de especificadores de formato na depuração interop com C++/CLI ou Editar e Continuar do C++

A tabela a seguir contém os símbolos de formatação usados para locais de memória. Você pode usar um especificador de local da memória com qualquer valor ou expressão que seja avaliada como um local.

Símbolo

Formato

Expressão

Valor exibido

ma

Caracteres ASCII na base 64

ptr, ma

0x0012ffac .4...0...".0W&.......1W&.0.:W..1...."..1.JO&.1.2.."..1...0y....1

m

16 bytes em hexadecimal, seguidos caracteres ASCII na base 16

ptr, m

0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&..

mb

16 bytes em hexadecimal, seguidos caracteres ASCII na base 16

ptr, mb

0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&..

mw

8 palavras

ptr, mw

0x0012ffac 34B3 00CB 3084 8094 22FF 308A 2657 0000

md

4 palavra duplas

ptr, md

0x0012ffac 00CB34B3 80943084 308A22FF 00002657

mq

2 palavras quádruplas

ptr, mq

0x0012ffac 7ffdf00000000000 5f441a790012fdd4

mu

Caracteres de 2 bytes (Unicode)

ptr, mu

0x0012fc60 8478 77f4 ffff ffff 0000 0000 0000 0000

Especificador de tamanho para ponteiros como matrizes em depuração interop com C++/CLI ou em Editar e Continuar do C++

Se você tiver um ponteiro para um objeto que você deseja exibir como uma matriz, pode usar um inteiro para especificar o número de elementos da matriz:

Especificador

Formato

Expressão

Valor exibido

n

Inteiro decimal

pBuffer[32]

Exibe pBuffer como uma matriz de 32 elementos.