2011-08-18 42 views
3

我有一個BOOL實例變量 - 出於某種原因 - 一段時間後,即使我將它設置爲YES(是的,我不太笨也不會寫或讀錯誤的變量,請相信我)。我花了一個小時搜索我的整個項目的任何可能性,其中該變量可能被設置爲NO,但無法找到它。如何追蹤變量在哪一點變化?

有沒有辦法跟蹤它的值的變化,即讓調試器停在準備修改變量的位置?

回答

10

找到一個解決方案,而黑客代碼:

  1. 斷點啓動調試啓用

  2. 在某些時候,其中有問題的變量範圍

  3. 運行設置一個斷點。當它暫停時,檢查調試器並找到該變量。

  4. 右鍵單擊它並選擇「觀察變量」。

3

你可以構造你的代碼,以便這個BOOL實例變量是一個屬性嗎?然後,您可以爲此屬性編寫自己的setter函數,然後在該setter函數中設置斷點。堆棧跟蹤會告訴你什麼叫setter方法。或者,您可以使用鍵值觀察功能在應用程序的運行時監視該屬性的更改,但這會增加更多複雜性。

+0

是的,這是應該做的一種方式,但一個很難。看到我的答案。 (不管怎麼說,多謝拉!) – openfrog

0

重構代碼使您的BOOL值@property,並使用KVO來監聽它何時將被更改。在監聽方法,您可以添加下一行註銷調用堆棧:

NSLog(@"Stack: %@", [NSThread callStackSymbols]);