В ее значении по умолчанию (т.е., мой) конфигурация, XCode несколько бесполезен в своем окне отладки для переменных, особенно те из общего разнообразия наборов Objective C.
Отладчик, кажется, обычно хочет отобразить базовую структуру Obj-C, когда я разворачиваю некоторый объект, таким образом, я смотрю на isa
s и иерархия классов.
Но что я почти всегда хочу вот, что-то семантически значимое для самого объекта. Например, для NSDictionary
, Я идеально хотел бы видеть список ключей/значений. Если те ключи и значения, например NSString
s, я просто хочу видеть строковые значения, не сложные вложенные объекты. То же идет для NSSet
s, NSArrays
, и байты в NSData
. И NSString
s, обычно получая их строковое представление в Сводном столбце, невозможны посмотреть на то, когда они длинны (например, путь, это слишком длинно для вписываний в столбец, кажется, не прокручивает) - когда я дважды щелкаю по нему, я получаю шаблонную строку дисплея вместо этого, таким образом, я не могу выбирать/копировать его также.
Я недавно провел время в Java отладки Eclipse, и для всех его отказов, Eclipse знает обо всех наборах Java и имеет простой короткий дамп из содержания строки или набора или безотносительно при нахождении его в отладчике.
Существует ли способ получить это в XCode? Я пропускаю что-то очевидное, или я должен погружаться в систему шаблонной обработки дисплея? Я знаю, что там существует некоторая поддержка, поскольку NSArrays, кажется, получают специальный вид listy формата, NSDictionaries получают "2 пары ключ/значение" сводка и т.д.
Править: Возможно заскочить в GDB для получения большего количества данных по объектам. Я приведен в уныние что GDB's po
действие на NSDictionary
дает вид удивительно полезного вывода, который я ожидаю от отладчика GUI. Это может копироваться без контекстного переключения на консоль?
Я наслаждаюсь средой XCode так, но почти полная непрозрачность объектов, что я использую все время действительно тупики, отлаживающие время.Спасибо.
Я бы посмотрел как на специальный вывод GDB (как заметил Гобра), так и на шаблоны отображения.
Отображение выглядит сложным, но на самом деле довольно простым - вот пример для создания NSIndexPath display " Sec: x Row: y ":
Sec:{(int)[$VAR section]} Row:{(int)[$VAR row]}
Таким образом, вы можете распечатать описательный текст и несколько значений для любых тип объекта. Переменные отображения работают для всех классов этого типа и сохраняются между запусками XCode, а также между проектами.
Еще одна сложная вещь, которую следует отметить: для всего, что возвращает строку, вам нужно добавить ": s" после пары "{}", например:
{[myClass description]}:s
Если вам нужно очистить шаблон отображения, просто щелкните строку, чтобы отредактировать и стереть все - вы вернетесь к значениям по умолчанию. Таким образом, действительно легко быстро создать временные средства форматирования для любого объекта, которые позволят вам точно увидеть, что представляет интерес.
Да, поиск переменных XCode во время отладки слабый, но он основан на gdb, и вы можете управлять им через консоль. Во время отладки откройте консоль и напишите любую команду, которая вам нужна, чтобы увидеть NSDictionary * dic; Содержимое это так же просто, как
po dic
po печатает данные, представленные в результате [obj description]. Вы также можете вызывать любые методы, например
po [dict valueForKey:@"myKey"], or p(NSRect) [[self view] frame]
. Дополнительные сведения можно найти в справке по gdb