2012-04-02 65 views
6

我目前正在用Xcode 4.3.2編寫iOS應用程序。在我的代碼的大部分地方,使用LLDB進行調試工作得很好。但是,在某些時候,我正在逐步瀏覽我的代碼時收到一條奇怪的消息。當我將鼠標懸停在伊娃,它說XLD 4.3與LLDB中奇怪的錯誤消息

錯誤[IRForTarget]:找不到Objective-C的間接伊娃符號OBJC_IVAR _ $ _ MyFancyClass.iVar

而不是顯示我的價值。但是,在Variables View中,我可以看到它很好。直到我選擇Print Description of ...也就是說,因爲這樣,Xcode崩潰了... 當我使用GDB時,懸停工作,但變量的類型和值是錯誤的。

我認爲我的代碼出了問題,導致調試器失敗。但是,代碼運行良好。我很樂意提供一些樣本代碼,但是班級相當長,我無法確定我擰緊的確切位置。那麼有沒有人遇到類似的行爲?

更新:實際上,這似乎發生在我的代碼中的任何地方,而不僅僅是在某些特定的文件。如果有幫助,當LLDB顯示上述消息時,GDB總是顯示擁有該iVar的Class對象,而不是iVar本身。 看起來好像內存管理有問題。例如,如果我這樣說

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

選擇被調用,即使我有

[notificationCenter postNotificationName:bar object:objB]; 
+0

您的代碼可能很長,但似乎沒有足夠的人遇到此問題。你可以只顯示出現這種行爲的代碼的彙總版本嗎? – 2012-04-10 14:26:55

+0

那麼,因爲它發生在我的代碼絕對無處不在,我真的不知道我可以發佈什麼...... – Phlibbo 2012-04-10 15:09:12

+0

我只是在這裏猜測所以我不發佈答案,但如果您嘗試使用調試器會發生什麼控制檯並使用「po」打印對象?另外,你可能有任何特殊的gdb配置嗎?這是你試圖調試的包含庫嗎?您是否構建啓用調試信息?仔細檢查你的構建設置(生成調試符號,優化級別,調試信息格式)。 – 2012-04-10 15:31:10

回答

9

此錯誤的原因是不正確的生成設置,如問題評論中的討論所示。這可以通過將「部署後處理」設置爲調試模式的NO(默認值)來解決。

2

確保MyFancyClass.m被添加到您的目標

+0

不幸的是,它已經是:/ – Phlibbo 2012-04-06 14:07:14

0

你選擇了nsnotification正在發送需要有一個(也是唯一的)參數,這是一個NSNotification。所以,當你這樣做:

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

-(void)foo 
{ 

} 

...你需要做的: [通知中心的addObserver:自我選擇:@選擇(FOO :)名稱:酒吧對象:objA]。

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

} 

注意notificationCenter的選擇器中的冒號和foo的參數。

+0

正確。然而,那只是我,在我的僞代碼中有一個錯字。請記住,真正的問題是奇怪的調試器警告:) – Phlibbo 2012-04-11 15:25:37

+0

(NSNotification)通知 應該是 (NSNotification *)通知 – braden 2013-09-11 22:09:27