2012-07-20 63 views
1

我一直在爲客戶端構建應用程序,一切都很順利,直到我開始出現此錯誤。這是一個獨特的情況,我已經學會了如何使用樂器和NSZombie,但是我不能在模擬器上使用iPhone上的NSZombieEnabled來運行樂器。我必須在iPhone中調試此問題,因爲我使用UIImagePicker拍攝照片,並在拍攝照片後不久發生錯誤。我也使用ARC,因此我無法設置發佈或保留信息,ARC禁止它,所以我懷疑它是雙發佈還是類似的東西。這個問題有兩個可能的答案。EXC_BAD_ACCESS使用ARC並且無法在模擬器上跟蹤

1:有誰知道我是否可以使用照相亭將圖像傳遞到UIImagePicker?如果我可以通過相機屏幕,我可以使用樂器和NSZombie。

2:是否有一種方法來檢測哪些行會導致錯誤,而不用重構或註釋掉使用iPhone的代碼?有沒有人知道有效的方法來追蹤iPhone上的bad_acces?

請記住,我正在使用ARC,無法在模擬器上進行調試。如果我拿出UIImagePicker控制腳本,這個錯誤不會發生,所以我將它縮小到我的CameraViewController類中。恐怕由於先前存在的合同,我無法發佈任何代碼,您必須成爲員工才能查看源代碼。

對不起,關於有限的信息,但真的我正在尋找關於調試的答案,而不是直接解決我的確切代碼問題。

要張貼回溯(我認爲)

(gdb) bt 
#0 0x339737e4 in objc_msgSend() 
#1 0x31b30140 in -[UIApplication sendAction:to:from:forEvent:]() 
#2 0x31b300e0 in -[UIApplication sendAction:toTarget:fromSender:forEvent:]() 
#3 0x31b300b2 in -[UIControl sendAction:to:forEvent:]() 
#4 0x31b2fe04 in -[UIControl(Internal) _sendActionsForEvents:withEvent:]() 
#5 0x31b30452 in -[UIControl touchesEnded:withEvent:]() 
#6 0x31b2eddc in -[UIWindow _sendTouchesForEvent:]() 
#7 0x31b2e756 in -[UIWindow sendEvent:]() 
#8 0x31b299fe in -[UIApplication sendEvent:]() 
#9 0x31b29336 in _UIApplicationHandleEvent() 
#10 0x3026c04a in PurpleEventCallback() 
#11 0x3443fce2 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__() 
#12 0x3443fca6 in __CFRunLoopDoSource1() 
#13 0x3443256c in __CFRunLoopRun() 
#14 0x34432276 in CFRunLoopRunSpecific() 
#15 0x3443217e in CFRunLoopRunInMode() 
#16 0x3026b5f2 in GSEventRunModal() 
#17 0x3026b69e in GSEventRun() 
#18 0x31ad0122 in -[UIApplication _run]() 
#19 0x31ace12e in UIApplicationMain() 
#20 0x000034ce in main (argc=1, argv=0x2ffff75c) at /Users/Andrew/Documents/Developing/Xcode Projects/ProjectSVN/Project/trunk/ProjectInterface/ProjectInterface/main.m:16 
+2

在模擬器上,您可以(暫時)更改代碼以從中選擇照片庫,而不是 - 你應該能夠調試它然後(這也將有助於縮小你的bug的地方:) – deanWombourne 2012-07-20 16:47:42

+0

它打開照片庫,以取代在模擬器上的相機,我怎麼能添加一張照片? – Xav 2012-07-20 17:27:32

+0

將圖像拖放到模擬器上 - 這將在Safari中打開。長按圖片,你可以選擇保存。 – deanWombourne 2012-07-20 17:28:56

回答

0

沒有代碼示例很難說,但ARC並不完全覆蓋您的所有基礎。例如,當對象(具有委託的類)不存在時,可能會得到這些EXC_BAD_ACCESS錯誤,但嘗試執行回調委託方法。

更具體地說,假設我在viewDidLoad:中創建了一個類 - 我們稱之爲ClassA。在我的假設情況下,我將我的視圖控制器設置爲ClassA的代表。不過,我還沒有申報財產ClassA,所以沒有提及它超出viewDidLoad:的範圍。

現在讓我們假設ClassA聲明由我的視圖控制器實現的委託方法。此代理將此自身的引用傳遞迴此代理方法中的視圖控制器。因爲它可能會或可能不會超出範圍,BOOM,訪問錯誤不好。檢查諸如此類的東西,哪些對象不再存在,並且正在傳遞給其他方法 - 它就是ARC可以讓你失敗的一種方式;)

+0

這聽起來非常接近我的問題,我是xCode的新手,所以我仍然很缺乏經驗。指向一個對象並連續傳遞給3個獨立的類。也許這是因爲分配指針的類被釋放並且指針被破壞了嗎?我可以傳遞實際的對象嗎?不是指針? – Xav 2012-07-20 17:03:06

+0

我懷疑這一點。如果委託沒有連接起來,它可能不會崩潰,只會有沒有回調功能。確保當你傳遞一個對象到許多地方,它堅持超越了它正在做的這個方法。 – bgoers 2012-07-20 17:32:26

+0

好吧,這實際上是確切的問題,是新的xCode我已經初始化5個不同的類沒有屬性在我的方法在我的的viewController。我所做的只是添加類和Booyah的屬性!感謝大家幫助我,從這篇文章中學到了很多東西。 – Xav 2012-07-20 19:13:19

2

EXC_BAD_ACCESS並不一定意味着一個內存管理問題。它可能很容易造成內存損壞或其他類型的錯誤。

發佈崩潰的回溯。

+0

我對xCode真的很陌生,我可以在xCode 4.2中獲取回溯嗎?對不起,我還是CS的初級並且已經在目標文件中寫了不到一個月的時間 – Xav 2012-07-20 17:04:06

+1

不用擔心,我們都在那裏一次(或兩次)當你的應用程序崩潰時,你應該放到Xcode中的調試器提示符中輸入'bt '和將輸出粘貼到你的問題中作爲代碼 – bbum 2012-07-20 17:07:12

+0

heh,我第一次輸入 D'OH! – Xav 2012-07-20 17:20:20

相關問題