本文旨在於總結和記錄軟體開發中有效的除錯思路。
當測試人員向我報告乙個嚴重的bug時,我應該如何去思考這個bug,如何有效的快速的精確的定位bug所處的**位置,如何最優解的修正**缺陷?
在運用經典的科學除錯方法時,基本會經歷如下步驟:
1. 通過可重複的試驗收集資料(即復現bug,同時抓去log);
2. 根據相關資料的統計構造乙個假說(即根據以往的經驗來確定方向,定義問題的邊界);
3. 設計乙個實驗來證明或者反證這個假說;
4. 實施實驗以證明或者反證假說,不能只停留在假說;
5. 跟具需要重複以上步驟。
依據以上五個步驟提供一種有效的方法:
1. 將錯誤狀態穩定下來;
2. 確定錯誤的**--
a) 收集產生bug的相關資料;
b) 分析所收集的資料,並構造對bug的假設;
c) 確定怎樣去證實或證偽這個假設,可以對程式進行測試;
d) 按照2 - c)確定的方法對假設做出最終結論
3. 修正bug;
4. 對所修補的地方進行測試;
5. 檢測修正是否有引入新的問題。
那麼針對android rom開發,可以用以上的方式來debug,對其他型別的軟體開發一樣適用,所不同的是除錯技巧和工具不同,但是歸根結底都是以上步驟的衍生。
只要明確了以上的五個步驟,在工程實踐中面對的問題大部分都會知道如何下手,首先就是分析現象和log來對bug分類,分類可以縮小缺陷**的範圍,同時也確定了分析方向,比如分events_log,如果確認是anr問題,那麼我就知道要去分析anr log,如此就可以確定是死鎖問題還是主線程操作i/o等耗時動作等。如果判斷方向是tombstone,那麼就去分析tombstone log,同時也就需要學習tombstone log的分析方法。
介紹android 開發的呼叫棧列印方法:
1)j**a 層:
thread.currentthread().dumpstack(); //方法一
log.d(tag,new runtimeexception("----exception----")); //方法二
new runtimeexception("----exception----").printstacktrace(); //方法三
2)native 層
#include
android::callstack stack(("----native exception----"));
利用呼叫棧就可以對**邏輯進行分析,輔助我們理解**的用意。比如需要分析android 手機啟動時 pms如何掃瞄system分割槽,安裝系統應用的流程,就可以結合列印呼叫棧的方式來印證自己對**邏輯的理解。
結合這些平台和語言的除錯工具和行之有效的具有指導性的除錯思路就可以對大部分bug進行分析,而不會覺得老虎吃天不知如何下嘴。
PHP程式如何debug
php l test.php基本除錯 api var dump var print r var echo var 基本的配置 display errors log errors error reporting error log備註 有時候,會關閉報錯,需要手動開啟。常用 ini set displ...
學習flask時設定debug沒有效果
配置資訊 windows7,pycharm2019.3.3,flask 1.1.1 事情經過 標題首先我是建立了乙個flask專案然後學習了一下基本知識,然後就新建立乙個專案,然後因為我忘記終止上乙個專案中的檔案,然後彈出來了這個框框,我就點了disconnect 然後就進入了新的專案中,嘗試使用d...
如何有效的思考
氣象學家教給我們,明天的天氣,有乙個簡單有效的辦法,在2 3的情況下都是正確的 只消說明天的天氣和今天一樣就是了。這樣一來,每個人都算得上氣象問題的專家了 66 的準確率。請想象一下,如果我們也能輕易的 99 的人類行為,那麼會早就多少心理學專家呢 只要一條簡單定律就足夠,這就是溫伯格雙胞胎定律。醫...