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
Перейдите к Product
→ Scheme
→ New Scheme...
и создайте новую схему для своей цели.
Очистите продукт под Product
→ Clean
, и ваше приложение должно работать должным образом.
Это решило мою проблему.