在叫用 linphone 的函式庫時,發生 exc_bad_access
的錯誤,因為這個錯誤往往發生的地方跟掛掉的地方是不一樣的,所以比較難除錯。
EXC_BAD_ACCESS
是因為對已經釋放的記憶體進行了非法操作,程式會直接 Crash,無法用 error handle catch 來處理。
Crash 片段
記錄發生 crash 的地方不只有一處,共同的特色就是都是掛在 linphone 的函式庫:
發生位置1 linphone_core_iterate()
:
@objc func iterate(){
let lc = LinphoneManager.getLc()
if lc != nil{
linphone_core_iterate(lc); /* first iterate initiates registration */
}
}
發生位置2 linphone_core_iterate()
:
if let phone = phoneNumber, lc = LinphoneManager.lc {
nameLabel.text = calleeName!
linphone_core_invite(lc, phone)
}
透 Debug build 測試
因為預設從 linphone 網站下載的 iphone sdk 是沒有 debug symbol 的,所以在發生 crash 的時侯,只能看到看組合語言:
雖然有 linphone 的函式名稱,但是對於問題的幫助不大。所以我就直接 build 一個 有 debug symbol 的 liblinphone-sdk,build debug sdk 步驟記錄在另一篇。
經過有 debug build 的協助之後, crash 的資訊從原本的組合語言變成了 c 語言 …