Поделиться через


Описатели формата для C++ в отладчике Visual Studio

Вы можете изменить формат, в котором значение отображается в окнах"Контроль", "Авто" и "Локальные" с помощью описателей формата.

Кроме того, можно использовать спецификаторы формата в окне непосредственного выполнения, окне команд, в точках трассировки и даже в исходных файлах. Если вы останавливаетесь на выражении в этих окнах, результат отображается в подсказке данных. Отображение DataTip соответствует спецификатору формата.

Замечание

Когда собственный отладчик Visual Studio изменился на новый обработчик отладки, были добавлены некоторые новые описатели формата, а некоторые старые были удалены. Старый отладчик по-прежнему используется при отладке смешанных (неконтролируемых и управляемых) сценариев с помощью C++/CLI.

Установить спецификаторы формата

Мы будем использовать следующий пример кода:

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

my_var1 Добавьте переменную в окно Наблюдение во время отладки, Отладка>Окна>Наблюдение>Наблюдение 1. Затем щелкните переменную правой кнопкой мыши и выберите шестнадцатеричный дисплей. Теперь в окне "Просмотр" отображается значение 0x0065. Чтобы увидеть это значение, выраженное как символ, а не целое число, сначала щелкните правой кнопкой мыши и отмените выбор шестнадцатеричного отображения. Затем добавьте спецификатор формата символов , c в столбце «Имя» после имени переменной. Теперь в столбце "Значение" отображается значение 101 "e".

Снимок экрана окна

Вы можете просмотреть и выбрать из списка доступных описателей формата, добавив запятую (,) к значению в окне "Просмотр".

WatchFormatSpecDropdown

Описатели формата

В следующих таблицах описаны описатели формата, которые можно использовать в Visual Studio. Спецификаторы, выделенные жирным шрифтом, поддерживаются только для нового отладчика, а не для интероперабельной отладки с C++/CLI.

Спецификатор Формат Исходное значение часов Отображаемое значение
d десятичное целое число 0x00000066 102
o целое восьмеричное число без знака 0x00000066 000000000146
x

h
шестнадцатеричное целое число 102 0xcccccccc
X

H
шестнадцатеричное целое число 102 0xCCCCCCCC
xb

hb
шестнадцатеричное целое число (без ведущих 0x) 102 cccccccccc
Xb

Hb
шестнадцатеричное целое число (без ведущих 0x) 102 CCCCCCCCCC
б двоичное целое число без знака двадцать пять 0b00000000000000000000000000011001
bb беззнаковое двоичное целое число (без начального 0b) двадцать пять 00000000000000000000000000011001
e научная нотация 25000000 2.500000e+07
г короче научного или с плавающей точкой 25000000 2.5e+07
c одиночный символ 0x0065 101 'e'
s строка const char* (с кавычками) <расположение> "hello world" "привет мир"
sb строка const char* (без кавычек) <расположение> "hello world" Всем привет
s8 Строка UTF-8 <расположение> "Это чашка кофе UTF-8 â ̃•" Это UTF-8 чашка кофе ☕
s8b Строка UTF-8 (без кавычки) <расположение> "hello world" Всем привет
Су Строка кодировки Юникод (кодировка UTF-16) (с кавычками) <расположение> L"hello world" L"Привет, мир"

"Привет, мир"
подводная лодка Строка кодировки Юникод (кодировка UTF-16) (без кавычки) <расположение> L"hello world" Всем привет
bstr Двоичная строка BSTR (с кавычками) <расположение> L"hello world" L"hello world"
окружение Блок среды (строка, заканчивающаяся двумя нулевыми символами) <местоположение> L"=::=::\\" L"=::=::\\\0=C:=C:\\windows\\system32\0ALLUSERSPROFILE=...
s32 Строка UTF-32 (с кавычками) <расположение> U"hello world" U"Привет, мир"
s32b Строка UTF-32 (без кавычки) <расположение> U"hello world" Всем привет
en перечисление Суббота(6) Суббота
hv Тип указателя — указывает, что проверяемое значение указателя является результатом выделения кучи массива, например new int[3]. <местоположение>{<первый элемент>} <местоположение>{<первый член>, <второй член>, ...}
na Подавляет адрес памяти указателя на объект. <location>, {member=value...} {member=value...}
nd Отображает только сведения о базовом классе, игнорируя производные классы. (Shape*) square включает в себя базовый класс и сведения о производных классах Отображает только сведения о базовом классе
hr Код ошибки HRESULT или Win32. Этот описатель больше не нужен для HRESULTs, так как отладчик декодирует их автоматически. S_OK S_OK
туалет Флаг класса Window 0x0010 WC_DEFAULTCHAR
wm Номера сообщений в Windows 16 WM_CLOSE
nr Отключение элемента "Необработанное представление"
nvo Отображение элемента "Необработанное представление" только для числовых значений
! необработанный формат, игнорируя настройки представлений типов данных <настраиваемое представление> 4
ручка Отображает сведения о дескрипторе win32 0x000000000000009c Отображает полезные сведения о дескрипторе, например, идентификаторе потока и т. д.

Замечание

При наличии описателя формата hv отладчик пытается определить длину буфера и отобразить это количество элементов. Так как отладчику не всегда удается найти точный размер буфера массива, следует использовать описатель (pBuffer,[bufferSize]) размера по возможности. Описатель формата hv полезен, если размер буфера недоступен.

Описатели размера указателей в виде массивов

Если у вас есть указатель на объект, который вы хотите просмотреть как массив, можно использовать целое число или выражение для указания количества элементов массива.

Спецификатор Формат Исходное значение часов Отображаемое значение
н Десятичное или шестнадцатеричное целое число pBuffer,[32]

pBuffer,[0x20]
Отображается pBuffer как массив из 32 элементов.
[exp] Допустимое выражение C++, которое оценивает целое число. pBuffer,[bufferSize] Отображает pBuffer в виде массива bufferSize элементов.
expand(n) Допустимое выражение C++, которое оценивает целое число pBuffer, expand(2) Отображает третий элемент pBuffer

Описатели формата для отладки взаимодействия с C++/CLI

Спецификатор Формат Исходное значение часов Отображаемое значение
o целое восьмеричное число без знака 0xF065 0170145
x

X
Шестнадцатеричное целое число 61541 0x0000f065
c одиночный символ <местоположение> 101 'e'
s const char* (с кавычками) <местоположение> "привет мир"
Су const wchar_t*

const char16_t* (с кавычками)
<местоположение> L"hello world"
подводная лодка const wchar_t*

const char16_t*
<местоположение> Всем привет
s8 const char* (с кавычками) <местоположение> "привет мир"
hr Код ошибки HRESULT или Win32.
Этот описатель больше не нужен для HRESULTs, так как отладчик декодирует их автоматически.
S_OK S_OK
туалет Флаг класса Window 0x00000040, WC_DEFAULTCHAR
wm Номера сообщений в Windows 0x0010 WM_CLOSE
! необработанный формат, игнорируя настройки представления типов данных <настраиваемое представление> 4

Спецификаторы d, e, f, g, h, i, l, m, ma, mb, md, mq, mu, mw и u для собственного кода и кода C++/CLI требовали устаревшего отладчика, который не поддерживается в Visual Studio 2022 или более поздних версиях.

Описатели в полужирном шрифте поддерживаются только для отладки собственного кода и кода C++/CLI. Для этих спецификаторов требуется устаревший отладчик, указанный с помощью режима управляемой совместимости.

Спецификатор Формат Исходное значение часов Отображаемое значение
д

i
целое число со знаком в десятичной системе 0xF000F065 -268373915
u целое десятичное число без знака 0x0065 101
o целое восьмеричное число без знака 0xF065 0170145
x

X
Шестнадцатеричное целое число 61541 0x0000f065
l

h
длинный или короткий префикс для: d, i, u, o, x, X 00406042 0x0c22
f подписанный с плавающей запятой (3./2.), f 1.500000
e подписывание научной нотации (3.0/2.0) 1.500000e+000
g подписанный с плавающей запятой или подписанная научная нотация,
независимо от того, что короче
(3.0/2.0) 1.5
c одиночный символ <местоположение> 101 'e'
s const char* (с кавычками) <местоположение> "привет мир"
Су const wchar_t*

const char16_t* (с кавычками)
<местоположение> L"hello world"
подводная лодка const wchar_t*

const char16_t*
<местоположение> Всем привет
s8 const char* (с кавычками) <местоположение> "привет мир"
hr Код ошибки HRESULT или Win32.
Этот описатель больше не нужен для HRESULTs, так как отладчик декодирует их автоматически.
S_OK S_OK
туалет Флаг класса Window 0x00000040, WC_DEFAULTCHAR
wm Номера сообщений в Windows 0x0010 WM_CLOSE
! необработанный формат, игнорируя настройки представления типов данных <настраиваемое представление> 4

Описатели формата для расположений памяти в отладке взаимодействия с C++/CLI

В следующей таблице описаны символы форматирования, используемые для расположений памяти. Вы можете использовать описатель расположения памяти с любым значением или выражением, которое приводит к определению расположения.

Описатели в полужирном шрифте поддерживаются только для отладки собственного кода и кода C++/CLI. Для этого требуется устаревший отладчик, указанный с помощью режима управляемой совместимости.

Symbol Формат Исходное значение часов Отображаемое значение
мама 64 символов ASCII 0x0012ffac 0x0012ffac .4...0...". 0W&....... 1W&.0.:W.. 1....".. 1.JO&.1.2..". 1...0y.... 1
m 16 байт в шестнадцатеричном формате, за которым следует 16 символов ASCII 0x0012ffac 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&..
Мб 16 байт в шестнадцатеричном формате, за которым следует 16 символов ASCII 0x0012ffac 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&..
МВт 8 слов 0x0012ffac 0x0012ffac 34B3 00CB 3084 8094 22FF 308A 2657 0000
md 4 двойные слова 0x0012ffac 0x0012ffac 00CB34B3 80943084 308A22FF 00002657
mq 2 квадворды 0x0012ffac 0x0012ffac 7ffdf00000000000 5f441a790012fdd4
мю 2-байтовые символы (Юникод) 0x0012ffac 0x0012ffac 8478 77f4 ffff ffff 0000 0000 0000 0000

Описатель размера для указателей в виде массивов в отладке взаимодействия с C++/CLI

Если у вас есть указатель на объект, который вы хотите просмотреть как массив, можно использовать целое число, чтобы указать количество элементов массива.

Спецификатор Формат Expression Отображаемое значение
н Десятичное целое число pBuffer[32] Отображается pBuffer в виде массива 32 элементов.