Android常見Crash緣由

1.Java Crash

java代碼致使jvm退出,彈出「程序已經崩潰」的對話框,最終用戶點擊關閉後進程退出。Logcat會在「AndroidRuntime」tag下輸出Java的調用棧。java

2.Native Crash

No.&Name數組

Reasonapp

Resolutionjvm

Comment工具

1.空指針spa

試圖對空指針進行操做時(如讀取空指針指向的內存),處理器就會產生一個異常指針

在使用指針前加以判斷,若是爲空,則是不可訪問的。進程

空指針目前是糯米app最多的一種引發crash的緣由,可是它也很容易被發現和修復。內存

2.野指針開發

指向的是一個無效的地址,該地址若是是不可讀不可寫的,那麼會立刻Crash;若是訪問的地址爲可寫,並且經過野指針修改了該處的內存,那麼頗有可能會等一段時間(其它的代碼使用了該處的內存後)才發生Crash。

  1. 在指針變量定義時,必定要初始化,特別是在結構體或類中的成員指針變量。
  2. 在釋放了指針指向的內存後,如該指針再也不用應置爲NULL
  3. 看代碼很難查找,經過代碼分析工具也很難找出,只有經過專業的內存檢測工具,才能發現這類bug。

數組越界

訪問無效的地址。若是該地址不可讀寫,則會立刻Crash;若是修改了該處的內存,形成內存破壞,那麼有可能會等一段時間纔在別處發生Crash。

  1. 全部數組遍歷的循環,都要加上越界判斷。
  2. 用下標訪問數組時,要判斷是否越界。
  3. 經過代碼分析工具能夠發現絕大部分的數組越界問題。

破壞內存的bug,很難查找。

整數除以零

整數除以零默認的處理方式是終止進程

在作整數除法時,要判斷被除數是否爲0的狀況。

改狀況在開發環境下很難出現,但龐大的用戶量和複雜的用戶輸入,就很容易致使被除數爲0的狀況出現。

格式化輸出參數錯誤

與野指針相似,可是隻會讀取無效地址的內存,而不會形成內存破壞。其結果是要麼打印出錯亂的數據,要麼訪問了無讀寫權限的內存而當即宕機。

在書寫輸出格式和參數時,要作到參數個數和類型都要與輸出格式一致

相關文章
相關標籤/搜索