違反ios系統規則產生crash的三種型別:
(1) 記憶體報警閃退
當ios檢測到記憶體過低時,它的vm系統會發出低記憶體警告通知,嘗試**一些記憶體;如果情況沒有得到足夠的改善,ios會終止後台應用以**更多記憶體;最後,如果記憶體還是不足,那麼正在執行的應用可能會被終止掉。在debug模式下,可以主動將客戶端執行的動作邏輯寫入乙個log檔案中,這樣程式童鞋可以將記憶體預警的邏輯寫入該log檔案,當發生如下截圖中的記憶體報警時,就是提醒當前客戶端效能記憶體吃緊,可以通過instruments工具中的allocations 和 leaks模組庫來發現記憶體分配問題和記憶體洩漏問題。
(2) 響應超時
(3) 使用者強制退出
一看到「使用者強制退出」,首先可能想到的雙擊home鍵,然後關閉應用程式。不過這種場景一般是不會產生crash日誌的,因為雙擊home鍵後,所有的應用程式都處於後台狀態,而ios隨時都有可能關閉後台程序,當應用阻塞介面並停止響應時這種場景才會產生crash日誌。這裡指的「使用者強制退出」場景,是稍微比較複雜點的操作:先按住電源鍵,直到出現「滑動關機」的介面時,再按住home鍵,這時候當前應用程式會被終止掉,並且產生乙份相應事件的crash日誌。
應用邏輯的bug
大多數閃退崩潰日誌的產生都是因為應用中的bug,這種bug的錯誤種類有很多,比如:
常見的崩潰原因基本都是**邏輯問題或資源問題,比如陣列越界,訪問野指標或者資源不存在,或資源大小寫錯誤等。
crash的收集
看日誌市場上已有的商業軟體提供crash收集服務,這些軟體基本都提供了日誌儲存,日誌符號化解析和服務端視覺化管理等服務:
crash資訊
由於自己的crash資訊太長,找了一張示例:
2)基本資訊描述的是crash發生的時間和系統版本;
3)異常型別描述的是crash發生時丟擲的異常型別和錯誤碼;
4)執行緒回溯描述了crash發生時所有執行緒的回溯資訊,每個執行緒在每一幀對應的函式呼叫資訊(這裡由於空間限制沒有全部列出);
5)二進位制映像是指crash發生時已載入的二進位制檔案。以上就是乙份crash日誌包含的所有資訊,接下來就需要根據這些資訊去解析定位導致crash發生的**邏輯, 這就需要用到符號化解析的過程(洋名叫:symbolication)。
解決線上閃退
首先保證,發布前充分測試。發布後依然有閃退現象,檢視崩潰日誌,及時修復並發布。
Linux環境,出現線上問題覆盤
最近和第三方做對接,在做排班管理時,星期 二 四 六 日不安排排班,於是加段 做層過濾,在本地環境程式能執行,部署到伺服器上,就失效了,一直心想 沒有問題呀,覺得是 打包不是最新的,於是打包好幾次,反反覆覆部署到伺服器,每次部署花20分鐘,部署6次,1個多小時過去了,本來想著不加班,下班回家的念想破...
當出現在form表單提交後台出現亂碼時!
jsp 頁面要有 page pageencoding utf 8 contenttype text html charset utf 8 在action頁面中若是通過post方法提交的請求,則要在dopost方法的最前面要有req.setcharacterencoding utf 8 一定是requ...
中學試卷上出現在爆笑答案
1 地理教過,中國產煤最多的地方是 遼寧省撫順,產鐵最多是遼寧省鞍山,所以撫順被稱為中國的 煤都 鞍山稱為 鐵都 某次考試,試卷上 中國的煤都是 黑的 中國的鐵都是 硬的 考完還說 老師怎麼出那麼簡單的題目?2 一次語文考試的附加題,問普羅公尺修斯是什麼文學作品裡面的人物,乙個同學填 哈里 波特。還...