#cpp #visual_studio #отладка #qtcreator
Написал свой класс строки - String. Но увидеть значение переменной типа String в Visual Studio или Qt Creator не могу (занимаюсь переводом в std::string). Как заставить IDE показывать значение таких переменных?
Ответы
Ответ 1
Смотрите. Для свежих версий Visual Studio (начиная с 2012) лучше всего пользоваться форматом natvis. При этом вы можете, например, включить визуализацию ваших типов прямо в проект, и Visual Studio даже будет подхватывать изменения отображения прямо на лету, во время отладки. Давайте разберём простой пример. Создадим простейший кастомный класс, представляющий строку. #include "stdafx.h" #includenamespace utils { class MyString { size_t length; char* payload; public: MyString() : length(0), payload(nullptr) { } MyString(char* data) : length(strlen(data)), payload(new char[length + 1]) { strcpy_s(payload, length + 1, data); } ~MyString() { delete[] payload; } }; } И простейший тест: int main() { utils::MyString s1; utils::MyString s2("I am string"); } Теперь добавим нашу кастомную визуализацию. Для этого идём в окно проекта и добавляем новый natvis-файл. Назовём его MyString.natvis. Получим следующий файл: Добавим в него нашу визуализацию. Положим тег Type с именем нашего типа (включая namespace). Подтег DisplayString задаёт то, как тип будет отображаться в одну строку. Можно добавить условие (DisplayString Condition=), в зависимости от которого значение будет отображаться по-другому. Подтег Expand управляет тем, как будут отображаться данные в «распахнутом» виде. (Поскольку это XML, не забудьте, что < и > для шаблонных типов придётся вводить как < и >, наподобие Name="std::vector<*>". Звёздочка используется для обозначения произвольного аргумента шаблона.) Получаем вот такую картинку в окошке Watch: Дополнительное чтение по теме: Подробная информация о синтаксисе natvis и его фичах находится здесь. Обзор новых возможностей natvis в Visual Studio 2015 здесь. [empty string] {payload,s}, len={length,d} - length,d
- payload, sb
Комментариев нет:
Отправить комментарий