2011-04-08 95 views
2

我怎麼能在Objective-C調試應用程序的iPhone時,Xcode如何調試iPhone應用程序

我的意思是好的,Xcode和調試模式是好的,但是當 BAD_ACCES我的應用程序崩潰(或不便。smilliar)我只是得到了跟蹤到程序集

當我調試C + +和可以說要訪問一個無效的指針,我得到的一行代碼的地方一切都崩潰的跟蹤...在這裏我只是得到一個跟蹤許多內部功能在組裝,所以我沒有線索什麼,哪裏出了問題

可能有些釋放/保留問題lem,但我怎麼知道?

謝謝

+0

您是否嘗試過構建和分析?雖然它不是實時調試,但它應該可以幫助您找到泄漏和釋放的途徑。 – Twelve47 2011-04-08 09:22:22

回答

1

您使用的是XCode 3嗎?如果是這樣,我會強烈建議升級到XCode 4.XCode 4中的調試器相比之下非常出色。讓我們回過頭來看看導致崩潰的原因。

4

在這裏,我們一起去了完整的答案:

我看了一下您的應用程序,我認爲這是與UINavigationController的在兩個地方相結合,異步HTTP加載的問題。啓用殭屍確實揭示了這兩個錯誤。我第一次能夠重現,第二次彈出幾次,然後不再。

*** -[DetailViewController respondsToSelector:]: message sent to deallocated instance 0x56d6030 
*** -[SearchViewController respondsToSelector:]: message sent to deallocated instance 0x56daa10 

我剛剛限制了我的帶寬,看看這些錯誤是否連接到http請求。查看[限制Mac上的帶寬] [1]以設置慢速連接。我將它設置爲5KBytes /秒。

如果您非常快速地查看詳細信息,然後再次查看兩個級別,並將其作爲觸發錯誤的最後一個操作,則會發生第一個錯誤:單擊搜索。堆棧跟蹤顯示一個

#2 0x004545b8 in -[UIWebView webView:decidePolicyForMIMEType:request:frame:decisionListener:] 

並且有一些線程打開,所以看下拉列表中有一個webThread。顯示該線程揭示了web視圖加載detailPages url的過程。這暗示webiew實際上完成了一個單獨的線程加載,並且無法連接回webview本身[DetailViewController respondsToSelector:]。這很容易證明:刪除webview請求的加載:我無法重現錯誤。

解決方案問題1 這個問題很容易解決,因爲webview並未在dealloc中發佈。也建議將代表設置爲無對象,但在這種情況下不需要。

- (void)dealloc { 
    webView.delegate = nil; 
    [webView release]; 
} 

第二誤差

棧跟蹤示出了

CLLocationManager onClientEventLocation: 

解錯誤

同誤差1,設置代表爲nil並釋放的LocationManager。


當您的應用程序崩潰時,您無法在左側窗口中打開調試器,您可以看到堆棧跟蹤。你可以雙擊任何會跳到你的代碼中正確位置的行(如果被調用的方法是你的)。

轉到項目 - >編輯活動Executable->參數選項卡 通過點擊+

Name:NSZombieEnabled 
Value:YES 

這將嘗試解決內存地址爲壞過剩錯誤的類名添加變量在下面的窗口。

要了解內存泄漏情況,請打開Run-> Run with performance tool-> Leaks。這將打開儀器,這是一個明智的工具,發現泄漏。

+0

是的,但在堆棧跟蹤中,我收到了一堆內部電話,而我自己也沒有 – 2011-04-08 09:25:29

+0

您可以發佈stacktrace的屏幕截圖嗎?可能有線索,是的,不是每一行都可以跳到你的代碼,因爲它是Apple的代碼,並且沒有打開。 – 2011-04-08 09:26:55

+0

這是http://img69.imageshack.us/i/debugb.png/ – 2011-04-08 17:38:33