Странное сообщение об ошибке в Xcode 4.3 с LLDB - PullRequest
6 голосов
/ 03 апреля 2012

В настоящее время я пишу приложение для iOS с Xcode 4.3.2. В большинстве частей моего кода отладка с LLDB работает просто отлично. Тем не менее, в какой-то момент я получаю странное сообщение, когда перебираю свой код. Когда я наводю курсор мыши на iVar, он говорит:

Ошибка [IRForTarget]: не удалось найти косвенный символ ива Objective-C OBJC_IVAR _ $ _ MyFancyClass.iVar

вместо того, чтобы показывать мне значение. Тем не менее, в Variables View, я вижу это очень хорошо. Пока я не выберу Print Description of ..., то есть, потому что тогда XCode падает ... Когда я использую GDB, зависание работает, но тип и значения переменной неверны.

Я понимаю, что с моим кодом что-то не так, что, в свою очередь, приводит к сбою отладчиков. Тем не менее, код работает нормально. Я хотел бы предоставить пример кода, но класс довольно длинный, и я не могу точно определить точное местоположение моего провала. Так кто-нибудь сталкивался с подобным поведением?

ОБНОВЛЕНИЕ: На самом деле, кажется, что это происходит везде в моем коде, а не только в некоторых конкретных файлах. Если это помогает, в то время как LLDB показывает вышеуказанное сообщение, GDB всегда показывает объект класса, которому принадлежит iVar, а не сам iVar. Похоже, что-то не так с управлением памятью. Например, если я скажу что-то вроде

[notificationCenter addObserver:self selector:@selector(foo) name:bar object:objA];

селектор вызывается, даже если у меня есть

[notificationCenter postNotificationName:bar object:objB];

Ответы [ 3 ]

9 голосов
/ 13 апреля 2012

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

2 голосов
/ 06 апреля 2012

Убедитесь, что MyFancyClass.m добавлено к вашей цели

0 голосов
/ 11 апреля 2012

Ваш селектор, которому отправляется уведомление, должен иметь один (и только один) аргумент, который является NSNotification.Поэтому, когда вы делаете это:

[notificationCenter addObserver:self selector:@selector(foo) name:bar object:objA];

-(void)foo
{

}

... вам нужно сделать это: [messagesCenter addObserver: self selector: @selector (foo :) name: bar object: objA];

-(void)foo:(NSNotification *)notification
{

}

Обратите внимание на двоеточие в селекторе для центра уведомлений и аргумент для foo.

...