基於日誌的代碼缺陷自動定位小工具
A log-based tool for software fault locating
王樹鈿
wangshudian#gmail.com,2011-4-2
關鍵字:狀態機器;日誌分析;代碼缺陷
1 引言
吃喝總要拉撒,做軟體總要定位Bug。定位問題的方法很多,其中有一種是分析系統日誌。通常我們分析日誌靠的是人工走讀,追蹤變化流程來找問題根源。往往日誌資訊量是比較大的,分析起來費時費力。本文借鑒文獻[1]的思路,開發了一個基於狀態轉換表進行日誌分析自動定位代碼缺陷的小工具。
2 功能簡述
根據使用者定義的狀態轉換規則,對事件記錄進行分析,檢查程式運行過程是否存在異常狀態轉換,並輸出缺陷警示資訊。
3 工具使用說明3.1 第一步,對象及其狀態分析
(1)確定檢查對象
(2)確定對象狀態機器
(3)編輯對象狀態轉換設定檔
給例:
[STATESET]<br />S0=state0<br />S1=state1<br />S2=state2</p><p>[INITSTATE]<br />S0</p><p>[ENDSTATE]<br />S0</p><p>[EVENTSET]<br />E0=event0<br />E1=event1<br />E2=event2<br />E3=event3</p><p>[EXCEPTIONSET]<br />S-1="error: info1..."<br />S-2="error: info2..."<br />S-3="error: info3..."<br />S-4="error: info4..."<br />S-5="error: info5..."<br />S-6="error: info6..."<br />S-7="error: info7..."<br />S-8="error: info8: not expected endstate"</p><p>[TRANSITION]<br />FROM=S0,ON=E0,TO=S1<br />FROM=S0,ON=E1,TO=S-1<br />FROM=S0,ON=E2,TO=S-2<br />FROM=S0,ON=E3,TO=S-3<br />FROM=S1,ON=E0,TO=S-4<br />FROM=S1,ON=E1,TO=S2<br />FROM=S1,ON=E2,TO=S-5<br />FROM=S1,ON=E3,TO=S0<br />FROM=S2,ON=E0,TO=S-6<br />FROM=S2,ON=E1,TO=S-7<br />FROM=S2,ON=E2,TO=S1<br />FROM=S2,ON=E3,TO=S0<br />
3.2 第二步,記錄事件記錄
因為不同產品代碼日誌形態各異,本工具解析規定了格式:
FILE:檔案名稱,LINE:行號,SM:對象名,OBJID:對象ID,EVENT:事件
注意:本工具約束對象名必須和第一步的ini檔案名稱一致。
可參考以下方案記錄日誌:
方案1,Hook方式。適用於不動原代碼的情況。
方案2,宏方式。
給例:
FILE:example.cpp,LINE:40,SM:statemachine_example,OBJID:0x477e22,EVENT:event0<br />FILE:example.cpp,LINE:40,SM:statemachine_example,OBJID:0x477e22,EVENT:event1<br />FILE:example.cpp,LINE:40,SM:statemachine_example,OBJID:0x477e22,EVENT:event1<br />
3.3 第三步,運行分析工具
可直接點擊LogFAT.exe運行,預設參數是LogFile.txt和ReportFile.txt.
也可在命令列執行,並指定記錄檔名和輸出報告名。
3.4 第四步,查看分析結果
開啟ReportFile.txt查看。
給例:
./gtest_LogFileAnalysisTool.cpp(40): Exception 7: (error: info7...)<br />./gtest_LogFileAnalysisTool.cpp(40): Exception 8: (error: info8: not expected endstate)<br />
參考文獻
【1】James H. Andrews, Theory and Practice of Log File Analysis, 1998
註:
CSDN部落格好似不能上傳附件,我把該工具Demo版放到的我發布的下載資源裡面了。連結:
http://download.csdn.net/source/3155673
歡迎大家反饋改進建議:)