[問題] 遇到Crash時,除錯的流程

看板MacDev作者 (小孩)時間12年前 (2013/08/07 02:21), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串1/2 (看更多)
前言: 想了解大家在處理crash問題時, 思路大約都是哪些方向, 希望能了解原理,這樣遇到問題時,才不會不知道怎麼辦。 下面先列出我想了解的問題, 以及我對此問題的想法, 希望有大大能幫我檢查是否有錯誤觀念,並幫我補完完整觀念‧ ps. 環境是ipad,不是iphone‧ 版本是ios 6。 (以前的版本沒有auto reference counting(ARC)?) (iphone跟ipad的autorelease pool有不同使用需求? 有ARC後還有差別?) 問題一: 會造成crash的主因有哪些? 問題二: 必定會crash的流程,可能的情形有哪些?解決的方式? 問題三: 不一定會crash的流程,可能的情形有哪些?解決的方式? === 我知道的: 呼叫已經free掉的物件必定會crash掉。 例如某個button的TouchUpInside事件裡, { UIViewController *pView; [self presentViewController:pView animated:YES completion:nil]; } 因為pView只存在這個function裡, 去執行presentViewController就會造成crash。 因為當view didload時,該view就被free了。 解決的方式是在.h檔裡宣告全域變數,這樣才不會執行完button事件,ViewController就被free掉了。 我不知道的: 若檔案A裡,有button event會presentViewController 檔案B, 而檔案B裡,也有button event會presentViewController 檔案C, (就是A->B->C) 此時檔案C裡,有button event會直接返迴檔案A, [self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:YES]; 檔案B跟C有使用AVPlayer,在畫面一直切換的情況下, 可能會在檔案B的presentViewController那行Crash, 也可能會在檔案C,dismiss那行Crash, 這種不穩定的狀況,發生原因可能是什麼? 因為dissmiss造成memory leak嗎? 在擁有實機,可以看到error msg,以及machine code的情況, 我可以檢查什麼來判斷問題? -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.24.71.234

08/07 09:51, , 1F
Zombie+Instrument 前幾天才被救一次
08/07 09:51, 1F

08/07 15:43, , 2F
跑analyze, memory profiling, xcode的工具全部查一遍
08/07 15:43, 2F
文章代碼(AID): #1I0Jwaci (MacDev)
文章代碼(AID): #1I0Jwaci (MacDev)