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


Определители формата в 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 элементов.