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. |