lldb не может вывести значения переменных с помощью «error: ссылка на id является неоднозначной» - PullRequest
45 голосов
/ 01 марта 2012

Поскольку я обновил 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

«Я» в порядке:

(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 /. Поиск в Google не выявил других случаев этой проблемы.

Я нашел одну ветку на форуме разработчиков Apple, но не нашел решения:

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

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

Ответы [ 5 ]

39 голосов
/ 01 марта 2012

Я нашел один обходной путь:

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

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

ОБНОВЛЕНИЕ

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

3 голосов
/ 11 сентября 2014

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

p self.view.bounds.size.width

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

po self.view

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

2 голосов
/ 05 ноября 2012

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

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

Просто перепроверьте, установлено ли оно на Debug, если нет, то выполните отладку.

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

1 голос
/ 11 октября 2013

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

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

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

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

0 голосов
/ 22 июля 2015

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

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

...