выражение (void)NSLog(@someString равно %@, someString)

У меня есть это как действие отладчика в точке останова:

expr (void)NSLog(@"someString is %@", someString)

но он рвет с:

error: warning: expression result unused
error: cannot find interface declaration for '$__lldb_objc_class'
error: cannot find interface declaration for '$__lldb_objc_class'
error: 2 errors parsing expression

Почему это не работает?

====
ОБНОВЛЕНИЕ

Я попробовал это в совершенно новом проекте Xcode. И это работает нормально. Итак, чтобы было ясно, эта строка не имеет синтаксических проблем в Xcode 4.6:

expr (void)NSLog(@"someString is %@", someString)

Однако копирование той же самой строки из точки останова в мой предыдущий проект Xcode приводит к той же проблеме.

Может быть, я что-то изменил в настройках сборки для этого конкретного проекта?


person Snowcrash    schedule 07.03.2013    source источник


Ответы (2)


Убедитесь, что вы не получаете доступ к этому коду из блока. Это объясняет, почему одна и та же точка останова работает в новом проекте, но не работает в другом. Это то, что происходит при попытке напечатать значение объектов в точках останова внутри блоков. Решение состоит в том, чтобы использовать NSLog в блоке для распечатки, а не использовать точки останова. Это раздражает, я знаю.

person Kelly Bennett    schedule 12.03.2013
comment
Спасибо - да, это выполнялось в блоке. Интересно, почему. В конце концов, someString был локальным для блока. Есть ссылка? Кажется, я не могу найти никакой информации об этом. - person Snowcrash; 13.03.2013

Если вы не скопировали это неправильно, я бы сказал, что символы двойных кавычек недействительны. Как насчет:

expr (void)NSLog(@"someString is %@", someString)

Если вы скопировали его правильно, то это известная ошибка.

person trojanfoe    schedule 07.03.2013
comment
Он неправильно скопировал его из этот пост как кажется... +1 за то, что заметил это - person Alladinian; 07.03.2013
comment
Нет, первым делом я проверил речевые метки. Никогда не копируйте и не вставляйте речевые метки! Между прочим, я использую Xcode 4.6. Есть ли обходной путь? - person Snowcrash; 07.03.2013
comment
@SnowCrash Не то, чтобы я знал; однако я знаю, что у меня это отлично работало в Xcode 4.5 и 4.6, поэтому я считаю, что это должно работать без проблем. Однако, если вы правильно скопировали кавычки, почему они неверны в вашем вопросе? - person trojanfoe; 07.03.2013
comment
Скопировано сюда из документа Word. Думаю, я должен сказать: Никогда не копируйте и не вставляйте кавычки в код ИЛИ StackOverflow! Но просто для проверки я стер и перепечатал кавычки в свою точку останова - тот же результат. Фиксированный вопрос. - person Snowcrash; 07.03.2013
comment
Протестировано с новым проектом - см. мое обновление. Так что проблема не в кавычках и не в баге. - person Snowcrash; 08.03.2013
comment
@SnowCrash Хорошо, я не могу объяснить, почему это не удалось в одном проекте. Если, конечно, в качестве отладчика не используется gdb... - person trojanfoe; 08.03.2013
comment
Варианты сборки @trojanfoe › Компилятор › LLVM 4.2. Хорошо, нет проблем - спасибо, что подумали об этом. - person Snowcrash; 08.03.2013
comment
@SnowCrash Это компилятор, а не отладчик. Однако я бы подумал, что это, вероятно, уже lldb. - person trojanfoe; 08.03.2013
comment
@trojanfoe Если я делаю «Редактировать схемы» > «Выполнить» > «Информация», я вижу LLDB в отладчике. Я предполагаю, что это означает, что я использую lldb. - person Snowcrash; 08.03.2013
comment
@SnowCrash Да, похоже. Я не могу объяснить проблему. - person trojanfoe; 08.03.2013