Отобразить значение свойства variable в отладчике LLDB?

Я использую точку останова с действием "Сообщение журнала", и я хочу напечатать строку NSIndexPath. Поэтому я попробовал: cell row @[email protected], но ничего не печатается. Я также попытался использовать команду отладчика: expr (void)NSLog(@"indexPath row:%i", indexPath.row), но я получаю сообщение об ошибке: error: property 'row' not found on object of type 'NSIndexPath *'

Что я делаю неправильно?

Ответ 1

Точечный синтаксис - это просто синтаксический сахар, добавленный компилятором. Я всегда не соглашался с добавлением его в Objective-C, но некоторым это нравится. Вы должны помнить, что эти точки преобразуются в вызовы методов компилятором, поэтому, когда вы сообщаете что-то прямо, как в отладчике, вы должны использовать фактический вызов метода. Попробуйте переписать выражение:

expr (void)NSLog(@"indexPath row: %ld", (long int)[indexPath row])

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

Ответ 2

Я думаю, что это особый случай. Код ниже будет работать, но только если row инициализируется некоторым значением.

(lldb) print (NSInteger)[indexPath row]

Я думаю, это может быть связано с тем, что свойство row является расширением NSIndexPath в UIKit и реализуется как категория в этом классе.

Ответ 3

Попробуйте установить этот итоговый формат в представлении переменной Xcodes:

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