2010-10-31 132 views
0

我試圖解決我的第一個非常難的EXC_BAD_ACCESS問題。我從很多教程和博客中看到,我可以使用殭屍工具來幫助我找出錯誤的地方。但我不認爲我的殭屍正在工作,而且我明確地沒有從控制檯中獲得任何有用的信息。無法讓殭屍在XCode中工作

當我開始計劃我看到這一點:This GDB was configured as "x86_64-apple-darwin".Setting environment variable "NSZombieEnabled" to null value.

最後,我看到一對夫婦的NSLog的痕跡我使用後被:

Program received signal: 「EXC_BAD_ACCESS」. 

根本沒有幫助。有任何想法嗎?我有一個偷偷摸摸的懷疑,即使殭屍工作,它也不能告訴我發生了不良訪問。 Objective C的讓我傷心 - 這要花費3秒的ActionScript :(


你說崩潰就在這裏(編輯問題的下一次):

- (IBAction) toggleView{ 
if(switchableView.subviews.count != 0) 
    [[switchableView.subviews objectAtIndex:0] removeFromSuperview]; 
UIViewController* newView = (viewSelector.selectedSegmentIndex == 0) ? [Login new] : [UserRegistration new]; 
[switchableView addSubview:newView.view]; 
//[newView release]; 
} 

回答

2

其實你從控制檯得到一些有用的東西。它告訴你,你還沒有啓用NSZombie - 「設置環境變量」NSZombieEnabled「爲空值。」

該值需要爲YES不爲空。

可執行文件 - >您的目標名稱 - >參數 - >變量,並在環境

設置即使沒有NSZombies啓用它應該是非常簡單的,看看你的壞訪問是從你的調用堆棧。動作腳本是一種腳本語言。

+0

謝謝你,我想我認爲複選標記是yes的合理表示。我發現我的問題,但我無法理解解決方案。 – pseudopeach 2010-10-31 18:01:59

+0

由於autorelease的魔力,這並不總是很容易找到。當這些咬傷時,回溯並不總是有幫助的。 – 2010-10-31 18:05:06

+1

這有什麼幫助。使用儀器,使用Object Alloc運行。停止您的應用程序,然後按下ObjectAlloc工具中的小「i」,並啓用NSZombie檢測以及引用計數。然後按「記錄」,你的應用程序將運行(在模擬器中執行此操作),當你得到「不良訪問」時,它將在儀器工具中用箭頭標記 - 按下該按鈕,你會看到每個都保留並釋放目的。 – 2010-10-31 18:35:37

0

沒有理由。這個錯誤必須由過度釋放對象引起的有很多其他原因,你可能會崩潰

Program received signal: 「EXC_BAD_ACCESS」.

OK - 所以它在哪裏CRA李嘉誠?什麼是回溯?它應該已經崩潰到調試器,調試器應該向您顯示關於崩潰的一些細節。

發佈回溯以及恰好在該回溯中的任何代碼。


這不是回溯,但它確實提供了更多的上下文。回溯會很有幫助,因爲它可以準確顯示碰撞發生的位置。就殭屍而言,我發現使用Run -> Run With Performance Tool -> Zombies菜單項來啓動殭屍檢測模式下的樂器更容易。

當您註釋掉release時,崩潰消失肯定表示內存管理問題。您發佈的代碼看起來沒問題,假設您沒有覆蓋new

您是否嘗試過「構建和分析」?

你得到一個意外的表格表明你的代碼中有[明顯]其他問題。這也可能包含內存管理問題呢?

此外 - 如果removeFromSuperview:導致稍後查詢所選段的視圖以釋放&解除分配,那也可能導致崩潰。


目標C讓我傷心 - 這將 採取3秒的ActionScript

任何你不知道讓你難過的時候你試圖把它當作無關的東西是你知道。任何語言,工具或新環境的成功與您的態度一樣,也是工具的細節。

我建議你退後一步,做一些教程和/或read some documentation about debugging applications

+0

這裏是它崩潰的地方。我試圖加載一個表到子視圖。它在我加載常規視圖控制器時工作 - 不是表格。 – pseudopeach 2010-10-31 17:57:47

+0

(IBAction爲)toggleView { \t如果(switchableView.subviews.count!= 0) \t \t [[switchableView.subviews objectAtIndex:0] removeFromSuperview]; \t UIViewController * newView =(viewSelector.selectedSegmentIndex == 0)? \t \t [Login new]:[UserRegistration new]; \t [switchableView addSubview:newView.view]; \t // [newView release]; } – pseudopeach 2010-10-31 17:58:12

+0

如果我發佈該版本,它會加載一個表格,但並不是我所期望的。如果我不釋放對象,是不是內存泄漏? 我讀過這個:http://stackoverflow.com/questions/937767/does-uiviews-addsubview-really-retain-the-view,但我真的不明白解決方案 – pseudopeach 2010-10-31 18:00:11