Определители формата в C++
При отладке машинного кода в окне Контрольные значения или диалоговом окне Быстрая проверка можно изменить формат отображения значений с помощью спецификаторов формата.
(Большинство спецификаторов формата используется только для машинного кода, но в Visual C# имеется ограниченный набор спецификаторов. Подробнее см. раздел Определители формата в C#.)
Спецификаторы форматов можно также использовать в окне интерпретации, окне команд и даже в окнах исходного кода. Если вы приостановите выполнение на выражении в одном из этих окон, результат отобразится в подсказке по данным. Отображение результата в подсказке по данным будет соответствовать спецификатору формата.
Примечание
Отладчик машинного кода Visual Studio переведен на новое ядро отладки.В это изменение вошло добавление некоторых новых спецификаторов формата и удаление некоторых старых спецификаторов.Процесс перехода еще не завершен, и старый отладчик по-прежнему используется для отладки взаимодействия (сочетания машинного и управляемого кода) с использованием C++/CLI и при отладке с помощью функции "Изменить и продолжить" языка С++.В подразделах этого раздела показаны спецификаторы формата для каждого ядра отладки.
-
В подразделе Спецификаторы формата Visual Studio 2012 описываются спецификаторы формата в новом ядре отладки.
-
В подразделе Спецификаторы формата для отладки взаимодействия и функции "Изменить и продолжить" языка C++ описываются спецификаторы формата в старом ядре отладки.
Описание
Пример
Спецификаторы формата Visual Studio 2012
- Спецификаторы размера для указателей как массивов в Visual Studio 2012
Спецификаторы формата для отладки взаимодействия и функции "Изменить и продолжить" языка C++
Спецификаторы формата адресов памяти при отладке взаимодействия и использовании функции "Изменить и продолжить" языка C++
Спецификатор размера для указателей как массивов при отладке взаимодействия и использовании функции "Изменить и продолжить" языка C++
Пример
Предположим, что nVar — целочисленная переменная и в окне "Контрольные значения" показано, что она содержит значение 0x0065. Чтобы представить это значение в символьном, а не целочисленном формате, в столбце "Имя" после имени переменной добавьте спецификатор символьного формата c:
Вместо целочисленного значения 0x0065 столбец "Значение" теперь показывает символьное значение 101 'e'.
Если спецификатор формата требуется применить к элементам массива или членам объекта, необходимо применить его непосредственно к каждому элементу или члену. Ко всему массиву или объекту применить спецификатор невозможно. Например, предположим, что имеется массив nArray и необходимо представить первые четыре элемента в символьном формате. Для этого достаточно ввести в окне Контрольные значения следующие выражения:
nArray[0],c
nArray[1],c
nArray[2],c
nArray[3],c
Спецификаторы формата Visual Studio 2012
В следующих таблицах приведены спецификаторы формата, которые можно использовать в Visual Studio 2012 при отладке кода, кроме отладки взаимодействия (сочетания машинного и управляемого кода) с использованием C++/CLI или использования функции "Изменить и продолжить" С++.
Спецификаторы, выделенные полужирным шрифтом, не поддерживаются для отладки взаимодействия с использованием C++/CLI или отладки с помощью функции "Изменить и продолжить" языка C++.
класса хранения |
Формат |
Выражение |
Отображаемое значение |
---|---|---|---|
d |
Десятичное целое число |
0xF000F065, d |
-268373915 |
o |
Восьмеричное целое число без знака |
0xF065, o |
0170145 |
x h |
Шестнадцатеричное целое число |
61546, x 61541, h |
0x0000f06a |
X H |
Шестнадцатеричное целое число |
61541, X 61546, H |
0x0000F06A |
c |
Одиночный знак |
0x0065, c |
101 "e" |
s |
Строка ASCII |
0x0012fde8, s |
"Здравствуй, мир" |
sb |
Строка ASCII |
0x0012fde8, sb |
Здравствуй, мир |
su |
Строка Юникода |
0x0012fde8, su |
L"Здравствуй, мир" |
sub |
Строка Юникода |
0x0012fde8, sub |
Здравствуй, мир |
s8 |
Строка UTF-8 |
0x0012fde8, s8 |
"Здравствуй, мир" |
s8b |
Строка UTF-8 |
0x0012fde8, s8b |
Здравствуй, мир |
bstr |
Строка BSTR |
0x0032fe8, bstr |
Привет |
, na |
&myGlobal, n winmain, na |
Адрес спецификатора не отображается. |
|
nd |
pb,nd |
Отображает только данные базового класса pb, без учета производных классов. |
|
hr |
Код ошибки HRESULT или Win32 (В настоящее время отладчик автоматически расшифровывает коды HRESULT, и в этих случаях данный спецификатор не требуется.) |
0x00000000L, hr |
S_OK |
wc |
Флаг класса Window |
0x00000040, wc |
WC_DEFAULTCHAR |
wm |
Номера сообщений Windows |
0x0010, wm |
WM_CLOSE |
! |
Формат raw (необработанные данные), все настройки представлений типов данных не учитываются |
i ! |
4 |
Спецификаторы размера для указателей как массивов в Visual Studio 2012
Если имеется указатель на объект, который требуется просмотреть в виде массива, можно использовать целое число или выражение для указания числа элементов массива.
класса хранения |
Формат |
Выражение |
Отображаемое значение |
---|---|---|---|
n |
Десятичное или шестнадцатеричное целое число |
pBuffer,[32] pBuffer,[0x20] |
Отображает pBuffer как массив из 32 элементов. |
[exp] |
Допустимое выражение C++, результатом которого является целое число. |
pBuffer,[bufferSize] |
Вычисляет bufferSize и отображает pBuffer как массив с вычисленным количеством элементов. |
expand(n) |
pBuffer, expand(1,2) |
Отображает третий дочерний элемент второго дочернего элемента pBuffer. |
Спецификаторы формата для отладки взаимодействия с использованием C++/CLI и для функции "Изменить и продолжить" C++
Спецификаторы, выделенные полужирным шрифтом, поддерживаются только для отладки машинного кода и кода С++/CLI, а также для отладки с использованием функции "Изменить и продолжить" языка С++.
класса хранения |
Формат |
Выражение |
Отображаемое значение |
---|---|---|---|
d,i |
Десятичное целое число со знаком |
0xF000F065, d |
-268373915 |
u |
Десятичное целое число без знака |
0x0065, u |
101 |
o |
Восьмеричное целое число без знака |
0xF065, o |
0170145 |
x,X |
Шестнадцатеричное целое число |
61541, x |
0x0000f065 |
l,h |
Префикс длинного или короткого формата для спецификаторов d, i, u, o, x и X |
00406042,hx |
0x0c22 |
f |
Число с плавающей запятой со знаком |
(3./2.), f |
1.500000 |
e |
Число в экспоненциальном представлении со знаком |
(3./2.), e |
1,500000e+000 |
g |
Число с плавающей запятой со знаком или число в экспоненциальном представлении со знаком, в зависимости от того, какой формат короче |
(3./2.), g |
1.5 |
c |
Одиночный знак |
0x0065, c |
101 "e" |
s |
Строковое |
0x0012fde8, s |
"Здравствуй, мир" |
su |
Строка Юникода |
0x0012fde8, su |
L"Здравствуй, мир" |
sub |
Строка Юникода |
0x0012fde8, sub |
Здравствуй, мир |
s8 |
Строка UTF-8 |
0x0012fde8, s8 |
"Здравствуй, мир" |
hr |
Код ошибки HRESULT или Win32 (В настоящее время отладчик автоматически расшифровывает коды HRESULT, и в этих случаях данный спецификатор не требуется.) |
0x00000000L, hr |
S_OK |
wc |
Флаг класса Window |
0x00000040, wc |
WC_DEFAULTCHAR |
wm |
Номера сообщений Windows |
0x0010, wm |
WM_CLOSE |
! |
Формат raw (необработанные данные), все настройки представлений типов данных не учитываются |
i ! |
4 |
Спецификаторы формата адресов памяти при отладке взаимодействия с использованием C++/CLI или использовании функции "Изменить и продолжить" C++
В следующей таблице содержатся символы, используемые для обозначения форматов представления адресов памяти. Спецификатор адреса памяти можно использовать для любого значения или выражения, возвращающего адрес ячейки памяти.
Символ |
Формат |
Выражение |
Отображаемое значение |
---|---|---|---|
ma |
64 знака ASCII |
ptr, ma |
0x0012ffac .4...0...".0W&.......1W&.0.:W..1...."..1.JO&.1.2.."..1...0y....1 |
m |
16 байт в шестнадцатеричном формате и затем 16 знаков ASCII |
ptr, m |
0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&.. |
mb |
16 байт в шестнадцатеричном формате и затем 16 знаков ASCII |
ptr, mb |
0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&.. |
mw |
8 слов |
ptr, mw |
0x0012ffac 34B3 00CB 3084 8094 22FF 308A 2657 0000 |
md |
4 двойных слова |
ptr, md |
0x0012ffac 00CB34B3 80943084 308A22FF 00002657 |
mq |
2 учетверенных слова |
ptr, mq |
0x0012ffac 7ffdf00000000000 5f441a790012fdd4 |
mu |
2-байтовые знаки (Юникод) |
ptr, mu |
0x0012fc60 8478 77f4 ffff ffff 0000 0000 0000 0000 |
Спецификатор размера для указателей как массивов при отладке взаимодействия с использованием C++/CLI или использовании функции "Изменить и продолжить" C++
Если имеется указатель на объект, который требуется просмотреть в виде массива, можно использовать целое число для указания числа элементов массива.
класса хранения |
Формат |
Выражение |
Отображаемое значение |
---|---|---|---|
n |
Десятичное целое число |
pBuffer[32] |
Отображает pBuffer как массив из 32 элементов. |