Интеллектуальное переменное содержание Obj-C при отладке в XCode?

В ее значении по умолчанию (т.е., мой) конфигурация, XCode несколько бесполезен в своем окне отладки для переменных, особенно те из общего разнообразия наборов Objective C.

Отладчик, кажется, обычно хочет отобразить базовую структуру Obj-C, когда я разворачиваю некоторый объект, таким образом, я смотрю на isas и иерархия классов.

Но что я почти всегда хочу вот, что-то семантически значимое для самого объекта. Например, для NSDictionary, Я идеально хотел бы видеть список ключей/значений. Если те ключи и значения, например NSStrings, я просто хочу видеть строковые значения, не сложные вложенные объекты. То же идет для NSSets, NSArrays, и байты в NSData. И NSStrings, обычно получая их строковое представление в Сводном столбце, невозможны посмотреть на то, когда они длинны (например, путь, это слишком длинно для вписываний в столбец, кажется, не прокручивает) - когда я дважды щелкаю по нему, я получаю шаблонную строку дисплея вместо этого, таким образом, я не могу выбирать/копировать его также.

Я недавно провел время в Java отладки Eclipse, и для всех его отказов, Eclipse знает обо всех наборах Java и имеет простой короткий дамп из содержания строки или набора или безотносительно при нахождении его в отладчике.

Существует ли способ получить это в XCode? Я пропускаю что-то очевидное, или я должен погружаться в систему шаблонной обработки дисплея? Я знаю, что там существует некоторая поддержка, поскольку NSArrays, кажется, получают специальный вид listy формата, NSDictionaries получают "2 пары ключ/значение" сводка и т.д.

Править: Возможно заскочить в GDB для получения большего количества данных по объектам. Я приведен в уныние что GDB's po действие на NSDictionary дает вид удивительно полезного вывода, который я ожидаю от отладчика GUI. Это может копироваться без контекстного переключения на консоль?

Я наслаждаюсь средой XCode так, но почти полная непрозрачность объектов, что я использую все время действительно тупики, отлаживающие время.Спасибо.

8
задан Ben Zotto 14 July 2010 в 18:44
поделиться

2 ответа

Я бы посмотрел как на специальный вывод GDB (как заметил Гобра), так и на шаблоны отображения.

Отображение выглядит сложным, но на самом деле довольно простым - вот пример для создания NSIndexPath display " Sec: x Row: y ":

Sec:{(int)[$VAR section]}  Row:{(int)[$VAR row]} 

Таким образом, вы можете распечатать описательный текст и несколько значений для любых тип объекта. Переменные отображения работают для всех классов этого типа и сохраняются между запусками XCode, а также между проектами.

Еще одна сложная вещь, которую следует отметить: для всего, что возвращает строку, вам нужно добавить ": s" после пары "{}", например:

{[myClass description]}:s

Если вам нужно очистить шаблон отображения, просто щелкните строку, чтобы отредактировать и стереть все - вы вернетесь к значениям по умолчанию. Таким образом, действительно легко быстро создать временные средства форматирования для любого объекта, которые позволят вам точно увидеть, что представляет интерес.

4
ответ дан 5 December 2019 в 18:56
поделиться

Да, поиск переменных XCode во время отладки слабый, но он основан на gdb, и вы можете управлять им через консоль. Во время отладки откройте консоль и напишите любую команду, которая вам нужна, чтобы увидеть NSDictionary * dic; Содержимое это так же просто, как

po dic

po печатает данные, представленные в результате [obj description]. Вы также можете вызывать любые методы, например

po [dict valueForKey:@"myKey"], or p(NSRect) [[self view] frame]

. Дополнительные сведения можно найти в справке по gdb

4
ответ дан 5 December 2019 в 18:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: