2012-10-04 26 views
0

使用配置文件來調試EXC_BAD_ACCESS錯誤我收到了EXC_BAD_ACCESS錯誤我閱讀本教程後:http://www.ioslearner.com/debugging-exc_bad_access-error-xcode-instruments/和遵循的步驟:如何在Xcode

  • 運行配置文件
  • 選擇殭屍

一切看起來在我的電腦上也是如此,只是我沒有得到Zomie Signal。

爲了確保我沒有忘記一個步驟,我嘗試了教程中提供的示例代碼。在那裏,我看到了Zombi信號

那麼,如何使用的Xcode讓殭屍信號在我的項目 - >個人資料?

這是我使用的示例代碼:

我清楚地知道,這兩個版本會導致錯誤。同樣的問題是在配置文件使用Xcode中如何獲得「殭屍消息」:

NSArray *currentRestaurant = [restaurants objectAtIndex:i]; 
RestauInfo *restauInfo = [NSEntityDescription 
         insertNewObjectForEntityForName:@"RestauInfo" 
         inManagedObjectContext:context]; 
[restauInfo release]; 
restauInfo.Name = [currentRestaurant objectAtIndex:0]; 
restauInfo.Cuisine = [currentRestaurant objectAtIndex:1]; 
NSError *error; 
if (![context save:&error]) { 
    NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
} 
[restauInfo release];// - this release would cause an EXC_BAD_ACCESS 

另外一個問題是:爲什麼我會在第二個版本bad_access - 先放後訪問restauInfo何時呢?

+0

你可以發佈關於你的崩潰錯誤報告?它通常會提供應用程序的回溯,因此您可以準確追蹤出錯的地方! –

+0

如何獲取錯誤報告?如果你的意思是左邊的堆棧跟蹤,那麼:我會看到我的一些類,因爲我稱之爲釋放兩次。但問題是我如何得到使用配置文件 –

+0

「殭屍消息」運行它沒有調試器,因此沒有xcode甚至。它會說'這個應用程序意外停止',點擊細節,它就是這樣。 –

回答

0

你overreleasing restauInfo,它的自動釋放對象,並調用-release手動兩次,導致您的崩潰。

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/CoreDataFramework/Classes/NSEntityDescription_Class/NSEntityDescription.html

+0

我知道 - 但我怎麼看到在Xcode-> Profile?這只是一個例子:因爲有錯誤,我應該得到一個Zombi消息嗎? –

+0

當然我已經修好了 - 但是我想知道如何在未來遇到困難的情況下調試exc_bad_access。當釋放var被垃圾收集 - 然後我沒有任何堆棧tracke來解決這個問題。 –

+0

你總是有一個堆棧跟蹤,因爲它的exc_bad_access,該信號總是終止你的過程 –

1

我找到了另一種方式檢測存儲器管理故障:

在Xcode中,您可以選擇「運行」,「測試」,「檔案」和「分析」
(通過按住在左上角的運行按鈕)

運行分析顯示內存管理錯誤 - 比如

  • 在釋放
  • 泄漏