Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Вы можете изменить формат, в котором значение отображается в окнах"Контроль", "Авто" и "Локальные" с помощью описателей формата.
Кроме того, можно использовать спецификаторы формата в окне непосредственного выполнения, окне команд, в точках трассировки и даже в исходных файлах. Если вы останавливаетесь на выражении в этих окнах, результат отображается в подсказке данных. Отображение 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"Привет, мир" |
| окружение | Блок среды (строка, заканчивающаяся двумя нулевыми символами) | <местоположение> 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 | Подавляет адрес памяти указателя на объект. | <местоположение>, {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"Привет, мир" |
| подводная лодка | 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
Если у вас есть указатель на объект, который вы хотите просмотреть как массив, можно использовать целое число, чтобы указать количество элементов массива.
| Спецификатор | Формат | Expression | Отображаемое значение |
|---|---|---|---|
| н | Десятичное целое число | pBuffer[32] | Отображается pBuffer в виде массива 32 элементов. |