iOS App Archive 版本出錯的問題 除錯和解決方法
現象:
debug聯機除錯時無問題
archive出來安裝到iPhone執行報錯
聯機在organizer中看錯誤日誌:
Triggered by Thread: 0
Thread 0 Crashed:
0 SanguoOnline 0x001a763e rijndael_decrypt + 14
1 SanguoOnline 0x001a81f2 decryption + 34
2 SanguoOnline 0x0010a024 cocos2dx_lua_loader + 376
rijndael_decrypt
為了更好的定位錯誤根源 Mac連上iPhone後 edit scheme 在Run ***(工程名)更新Build Configuration選擇Release 這樣保證聯機執行的版本與釋出版本一致,再執行程式開始除錯。
果然在rijndael_decrypt 報錯
跟蹤程式碼除錯,發現明明一個變數有值但將它賦值給另外一個變數時出錯 錯誤資訊: Exception Subtype: EXC_ARM_DA_ALIGN at 0x02dff001
懷疑是編譯器問題 嘗試修改編譯器優化數值:
工程-> Target -> Apple LLVM 5.1 - Code Generation -> Optimization Level -> Release 設定為 None [-O0] (與debug儲存一致) 再聯機執行除錯,問題沒有再出現
現在需要單獨設定此檔案 為不優化,首先把 Optimization Level -> Release 值 改回去
再在 Build Phases 中搜索 rijn 找到對應的檔案 點選 Complier Flag 設定為 -O0
再聯機進行除錯,問題沒有出現
再Archive出來 再除錯 問題沒有出現,至此問題結束
問題關鍵:
1. 如果Archive 版本有Debug版本不存在的問題,首先修改Scheme將執行方式改完Release以保證聯機除錯版本一致
2. 如果確實存在通過修改程式碼邏輯無法修復的問題 需要考慮是否為編譯器的bug 調整編譯優化值