Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Вы можете изменить формат, в котором значение отображается в окнах"Контроль", "Авто" и "Локальные" с помощью описателей формата.
Кроме того, можно использовать спецификаторы формата в окне непосредственного выполнения, окне команд, в точках трассировки и даже в исходных файлах. Если вы останавливаетесь на выражении в этих окнах, результат отображается в подсказке данных. Отображение 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".
Вы можете просмотреть и выбрать из списка доступных описателей формата, добавив запятую (,) к значению в окне "Просмотр".
Описатели формата
В следующих таблицах описаны описатели формата, которые можно использовать в 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 элементов. |