Страницы

Поиск по вопросам

вторник, 9 октября 2018 г.

Как увидеть значение своего класса String?

Написал свой класс строки - String. Но увидеть значение переменной типа String в Visual Studio или Qt Creator не могу (занимаюсь переводом в std::string).
Как заставить IDE показывать значение таких переменных?


Ответ

Смотрите.
Для свежих версий Visual Studio (начиная с 2012) лучше всего пользоваться форматом natvis. При этом вы можете, например, включить визуализацию ваших типов прямо в проект, и Visual Studio даже будет подхватывать изменения отображения прямо на лету, во время отладки.
Давайте разберём простой пример. Создадим простейший кастомный класс, представляющий строку.
#include "stdafx.h" #include
namespace 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<*>". Звёздочка используется для обозначения произвольного аргумента шаблона.)
[empty string] {payload,s}, len={length,d} length,d payload, sb
Получаем вот такую картинку в окошке Watch:

Дополнительное чтение по теме:
Подробная информация о синтаксисе natvis и его фичах находится здесь Обзор новых возможностей natvis в Visual Studio 2015 здесь

Комментариев нет:

Отправить комментарий