Lldb не может печатать значения переменных с "ошибкой: ссылка на" id "неоднозначна"

Так как я обновился до xcode 4.3 и позволю ему переключить мой отладчик на lldb, любой запрос на печать переменной-члена не выполняется с этим сообщением об ошибке:

(lldb) print request
error: error: reference to 'id' is ambiguous
note: candidate found by name lookup is 'id'
note: candidate found by name lookup is 'id'
error: 1 errors parsing expression

'self' в порядке:

(lldb) print self
(LoginViewController *) $6 = 0x1cd54d50

И другие формы печати переменной-члена также терпят неудачу:

(lldb) print self.request
error: property 'request' not found on object of type 'LoginViewController *'; did you mean to access ivar 'request'?
error: 1 errors parsing expression
(lldb) print self->request
error: error: reference to 'id' is ambiguous
note: candidate found by name lookup is 'id'
note: candidate found by name lookup is 'id'
error: 1 errors parsing expression

Все остальное, похоже, работает нормально. Окно переменной Xcode может корректно извлекать значение. Я пробовал чистую сборку и удаление ~/Library/Developer/Xcode/DerivedData/. Googling не выявил других случаев одной и той же проблемы.

Я нашел один поток на форуме Apple dev, но не нашел решения:

https://devforums.apple.com/message/623694

Я сообщил об этом Apple в качестве идентификатора ошибки № 11029004.

Ответ 1

Я нашел одно обходное решение:

Используйте "Редактировать схему" в меню "Продукт", выберите "Выполнить" на левой панели, вкладку "Информация" и измените Отладчик на gdb (это не относится к xcode 5, у которого больше нет gdb).

Очевидно, Apple подумала, что они исправили эту ошибку в xcode 4.3.1, но все равно это произойдет. Я отправил дополнительную дополнительную отладочную информацию, которую они запросили, поэтому я надеюсь, что она будет исправлена ​​для следующей версии xcode. Он все еще не работает в 4.3.2. См. https://devforums.apple.com/message/623694 для обновления от Apple.

UPDATE

Я пробовал различные случаи, с которыми у меня были проблемы, и все они работают нормально с lldb в Xcode 4.4.1 - поэтому я настоятельно рекомендую обновить, если у вас возникла эта проблема.

Ответ 2

Попробуйте следующее выражение,

p self.view.bounds.size.width

или используйте

po self.view

p - Печать используется только для печати обычных/простых значений в то время как, po - Объект печати работает так же, как NSLog для печати значения объекта

Ответ 3

Используйте Edit scheme в меню "Продукт", выберите "Выполнить" на левой панели, вкладку "Информация" и измените Отладчик на gdb.

Product > Edit scheme > Run (Схемы) > Build Configuration он имеет три варианта (некоторые могут видеть только два 1, 2)  1. Отладка  2. Выпуск  3. AdHoc

Просто перекрестите проверку, если она установлена ​​на Debug, если нет, тогда сделайте ее Debug.

Это была ошибка, которую я делал

Ответ 4

(Xcode5) Это не прямой ответ на исходный вопрос, но я думаю, что это может быть актуальным, и я бы не хотел думать, что кто-то еще тратит часы, когда я его отслеживал. Проблема была в том, что в окне отладки не показывались значения переменных.

Я проверил вызов, который был фактически предоставлен компилятору, и обнаружил, что он оптимизирован с -Os, несмотря на то, что каждый проект и цель в рабочей области явно установлены на -O0, а настройки, упомянутые в других ответах здесь, все для параметра "Отладка". После долгих поисков я обнаружил, что есть опция в разделе "Информация" каждого проекта под названием "Использовать xxx для сборки в командной строке", где xxx - Debug/Release или любые другие конфигурации. Согласно описанию всплывающей подсказки, этот параметр должен влиять только на сборки, выполненные через командную строку с помощью инструмента xcodebuild (что немного странно, потому что этот инструмент отлично способен выбрать, какую схему использовать в качестве опции командной строки). В любом случае, изменив этот параметр на Debug, наконец, IDE сообщила компилятору, что я хотел -O0 и -g. Я не помню, чтобы это происходило с Xcode4 с той же рабочей областью.

Я также должен добавить, что вы можете выполнить очистку перед изменением этого параметра. Я изменил его без очистки, и вдруг некоторые из моих файлов заголовков не были найдены (казалось, что предварительно скомпилированные заголовки генерировались неправильно). Спустя еще час или около того, в темноте, я обнаружил, что если я сначала установил вышеупомянутый вариант обратно в Release и сделал чистый, тогда я смог бы установить его в Debug и успешно построить.

Кто-нибудь знает, действительно ли команда разработчиков Xcode сама использует это? Я получаю отчетливое впечатление, что они этого не делают.

Ответ 5

Перейдите к ProductSchemeNew Scheme... и создайте новую схему для своей цели. Очистите продукт под ProductClean, и ваше приложение должно работать должным образом.

Это решило мою проблему.