2008-11-08 4 views
7

От googling вокруг это выглядит как XCode (3.1 в моем случае), должно быть, по крайней мере, пытаться дать мне разумное отладочное представление контейнеров STL - или, по крайней мере, векторов.Проверка контейнеров STL в XCode

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

Я пропустил настройку или что-то еще?

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

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

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

ответ

1

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

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

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

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

+0

Да, я понимаю, что такие карты нетривиальны и определенно потребуют логики реализации (хотя я мог бы представить себе систему, в которой он использует открытый API для получения информации). Я знаю, что другим IDE удалось это сделать. Я думал, что должен хотя бы видеть векторы. – philsquared 2008-11-09 11:51:12

2

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

1

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

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

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

Смежные вопросы