Проверка контейнеров STL в Xcode - PullRequest
7 голосов
/ 09 ноября 2008

Из-за поисков в гугле похоже, что Xcode (в моем случае 3.1) должен, по крайней мере, попытаться дать мне нормальное отладочное представление контейнеров STL - или, по крайней мере, векторов.

Однако, когда бы я ни посмотрел на вектор в отладчике, я просто вижу M_impl с членами M_start и M_finish (и парой других) - но между ними нет ничего! (это отладочная сборка, кстати).

Я что-то пропустил или что-то еще?

Я также читал, что есть доступные макросы, которые могут еще больше расширить средство просмотра отладки для проверки более сложных контейнеров, но не смогли их найти.

Я также хотел бы иметь возможность просматривать std :: wstrings без необходимости переходить в просмотрщик памяти. Он показывает std :: string в порядке. Что я могу сделать, чтобы показать std :: wstring?

Я понимаю, что это немного сложный вопрос, но на самом деле это все часть одной и той же темы.

Ответы [ 3 ]

2 голосов
/ 09 ноября 2008

Вы можете создать Форматеры данных для различных типов переменных, чтобы они выглядели лучше: -).

1 голос
/ 11 июля 2012

Попробуйте использовать отладчик GDB в Project-> Edit Scheme ... и рассмотрите возможность переключения вашего компилятора на LLVM GCC 4.2 в настройках сборки проекта (в разделе Build Options -> Compiler for C / C ++ / Objective-C).

В XCode 4 я обнаружил, что мне нужны эти настройки для просмотра таких вещей, как std :: vector из V3f, где V3f - шаблонный векторный тип с плавающей точкой.

Обратите внимание, что вы не можете использовать ARC (автоматический подсчет ссылок) с LLVM GCC 4.2.

1 голос
/ 09 ноября 2008

Возможность просмотра элементов контейнера может зависеть от сложности шаблонного типа. Для тривиальных объектов, таких как int, bool и т. Д., И даже для простых шаблонов классов, таких как

template <class T> struct S { T m_t; }

I обычно не имеют проблем с просмотром векторных элементов в представлении переменной отладчика. Я говорю нормально, потому что кажутся случайные ошибки, которые приводят к тому, что вещи - особенно при отладке - не ведут себя так, как я ожидал. Одной из таких вещей является мусор или совершенно бесполезная информация в представлении переменных. Обычно чистая перестройка цели (или иногда даже более радикальный перезапуск XCode с последующей чистой перестройкой) решает проблему.

Что касается других типов контейнеров, то, скорее всего, трудно эффективно просматривать эту информацию. Например, карта часто реализуется как красно-черное дерево. Отладчик должен знать об этом заранее, чтобы правильно пройтись по дереву и показать вам все ключи и значения. Это, вероятно, требует многого от Xcode или GDB - тем более, что первый фокусируется больше на Objective-C и обычном C, чем на C ++ (следовательно, тот факт, что пространства имен имеют тенденцию убивать завершение кода, несмотря на их повсеместность и важность).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...