Compartilhar via


Especificadores de formato para C++ no depurador do Visual Studio

Você pode alterar o formato no qual um valor é exibido nas janelas Inspeção, Autos e Locais usando especificadores de formato.

Você também pode usar especificadores de formato na janela Imediata , na janela Comando , nos pontos de rastreamento e até mesmo nas janelas de origem. Se você pausar uma expressão nessas janelas, o resultado será exibido em uma Dica de Dados. A exibição DataTip reflete o especificador de formato.

Observação

Quando o depurador nativo do Visual Studio foi alterado para um novo mecanismo de depuração, alguns especificadores de novo formato foram adicionados e alguns antigos foram removidos. O depurador mais antigo ainda é usado quando você faz a depuração de interoperabilidade (código nativo e gerenciado misto) com C++/CLI.

Definir especificadores de formato

Usaremos o seguinte código de exemplo:

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

Adicione a variável my_var1 à janela Watch durante a depuração, Debug>Windows>Watch>Watch 1. Em seguida, clique com o botão direito do mouse na variável e selecione Exibição Hexadecimal. Agora, a janela Watch mostra o valor 0x0065. Para ver esse valor expresso como um caractere em vez de um inteiro, primeiro clique com o botão direito do mouse e desmarque a Exibição Hexadecimal. Em seguida, adicione o especificador de formato de caractere , c na coluna Name após o nome da variável. A coluna Valor agora mostra 101 'e'.

Captura de tela da janela de inspeção do Visual Studio com uma linha selecionada que mostra my_var1.c com um valor de 101 e 'e' e um tipo int.

Você pode exibir e selecionar a partir de uma lista de especificadores de formato disponíveis anexando uma vírgula (,) ao final do valor na janela Watch.

WatchFormatSpecDropdown

Especificadores de formato

As tabelas a seguir descrevem os especificadores de formato que você pode usar no Visual Studio. Especificadores em negrito só têm suporte para o novo depurador e não para depuração de interoperabilidade com C++/CLI.

Especificador Formato Valor original do relógio Valor exibido
d inteiro decimal 0x00000066 102
o inteiro octal sem sinal 0x00000066 000000000146
x

h
inteiro hexadecimal 102 0xcccccccc
X

H
inteiro hexadecimal 102 0xCCCCCCCC
Xb

Hb
inteiro hexadecimal (sem o prefixo 0x) 102 cccccccc
Xb

Hb
inteiro hexadecimal (sem o prefixo 0x) 102 CCCCCCCC
b inteiro binário sem sinal vinte e cinco 0b00000000000000000000000000011001
Bb inteiro binário sem sinal (sem o prefixo 0b) vinte e cinco 00000000000000000000000000011001
e notação científica 25000000 2.500000e+07
g menor de ponto científico ou flutuante 25000000 2.5e+07
c caractere único 0x0065 101 'e'
s cadeia de caracteres const char* (com aspas) <local> "olá, mundo" "Olá, mundo"
Sb cadeia de caracteres const char* (sem aspas) <local> "olá, mundo" Olá, mundo
s8 Cadeia de caracteres UTF-8 <local> "Esta é uma xícara de café UTF-8 â ̃•" "Esta é uma xícara ☕ de café UTF-8"
s8b Cadeia de caracteres UTF-8 (sem aspas) <local> "olá, mundo" Olá, mundo
Su Cadeia de caracteres Unicode (codificação UTF-16) (com aspas) <local> L"hello world" L"olá, mundo"

"olá mundo"
Substituto Cadeia de caracteres Unicode (codificação UTF-16) (sem aspas) <local> L"hello world" Olá, mundo
bstr Cadeia de caracteres binária BSTR (com aspas) <local> L"hello world" L"olá, mundo"
Env Bloco de ambiente (cadeia de caracteres terminada duplamente nula) <localização> L"=::=::\\" L"=:=::\\\\0=C:=C:\\windows\\system32\0ALLUSERSPROFILE=...
s32 Cadeia de caracteres UTF-32 (com aspas) <localização> U"hello world" U"olá mundo"
s32b Cadeia de caracteres UTF-32 (sem aspas) <location> U"hello world" Olá, mundo
en enumeração Sábado(6) Sábado
Hv Tipo de ponteiro – indica que o valor do ponteiro que está sendo inspecionado é o resultado da alocação de heap de uma matriz, por exemplo, new int[3]. <localização>{<primeiro membro>} <localização>{<primeiro membro>, <segundo membro>, ...}
na Oculta o endereço de memória de um ponteiro para um objeto. <localização>, {member=value...} {member=value...}
Nd Exibe apenas as informações de classe base, ignorando classes derivadas (Shape*) square inclui informações de classe base e de classe derivada Exibe apenas informações de classe base
RH Código de erro HRESULT ou Win32. Esse especificador não é mais necessário para HRESULTs, pois o depurador os decodifica automaticamente. S_OK S_OK
banheiro Sinalizador de classe de janela 0x0010 WC_DEFAULTCHAR
wm Números de mensagens do Windows 16 WM_CLOSE
Nr Suprimir o item "Exibição Bruta"
nvo Mostrar o item "Visão Bruta" somente para valores numéricos
! formato bruto, ignorando as personalizações de exibições de tipo de dados <representação personalizada> 4
alça Exibe informações sobre o identificador win32 0x000000000000009c Exibe informações úteis sobre o identificador, como a ID do thread, etc.

Observação

Quando o especificador de formato hv está presente, o depurador tenta determinar o comprimento do buffer e exibir esse número de elementos. Como nem sempre é possível que o depurador localize o tamanho exato do buffer de uma matriz, você deve usar um especificador (pBuffer,[bufferSize]) de tamanho sempre que possível. O especificador de formato hv é útil quando o tamanho do buffer não está prontamente disponível.

Especificadores de tamanho para ponteiros como matrizes

Se você tiver um ponteiro para um objeto que deseja exibir como uma matriz, poderá usar um inteiro ou uma expressão para especificar o número de elementos de matriz.

Especificador Formato Valor original do relógio 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] Exibe pBuffer como uma matriz de bufferSize elementos.
expand(n) Uma expressão C++ válida que é avaliada como um inteiro pBuffer, expand(2) Exibe o terceiro elemento de pBuffer

Especificadores de formato para depuração de interoperabilidade com C++/CLI

Especificador Formato Valor original do relógio Valor exibido
o inteiro octal sem sinal 0xF065 0170145
x

X
Inteiro hexadecimal 61541 0x0000f065
c caractere único <localização> 101 'e'
s const char* (com aspas duplas) <localização> "Olá, mundo"
Su const wchar_t*

const char16_t* (entre aspas)
<localização> L"olá, mundo"
Substituto const wchar_t*

const char16_t*
<localização> Olá, mundo
s8 const char* (com aspas duplas) <localização> "Olá, mundo"
RH Código de erro HRESULT ou Win32.
Esse especificador não é mais necessário para HRESULTs, pois o depurador os decodifica automaticamente.
S_OK S_OK
banheiro Sinalizador de classe de janela 0x00000040, WC_DEFAULTCHAR
wm Números de mensagens do Windows 0x0010 WM_CLOSE
! formato bruto, ignorando as personalizações de exibição de tipo de dados <representação personalizada> 4

Os especificadores d, e, f, g, h, i, l, m, ma, mb, md, mq, mu, mw e u para código nativo e C++/CLI exigem o depurador herdado, que não tem suporte no Visual Studio 2022 ou versões posteriores.

Especificador de tamanho para ponteiros como matrizes na depuração de interoperabilidade com C++/CLI

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

Especificador Formato Expression Valor exibido
n Inteiro decimal pBuffer[32] É exibido como uma matriz de 32 elementos pBuffer .