PREfast(Prefast.exe)是微軟公司為驅動程式設計所提供的靜態的原始碼分析工具(static source code analysis tool),可偵測原始代碼中不易用一般編譯器找到的特定類型錯誤,與Windows DDK建置環境一同安裝。已集成至Visual Studio 2005 Team Suite中,使用時只要設定‘Enable Code Analysis For C/C++’為‘Yes’即可,接下來PREfast會攔截cl編譯器 (cl.exe) 的調用,產生由一次檢查所有檔案所得的單一聯合清單,內容屬於XML格式。
基本介紹
- 中文名:PREfast
- 外文名:PREfast
- 領域:計算機
簡介,PREfast的工作,相關條目,
簡介
PREfast(Prefast.exe)是微軟公司為驅動程式設計所提供的靜態的原始碼分析工具(static source code analysis tool),可偵測原始代碼中不易用一般編譯器找到的特定類型錯誤,與Windows DDK建置環境一同安裝。集成至Visual Studio 2005Team Suite中,使用時只要設定‘Enable Code Analysis For C/C++’為‘Yes’即可,接下來PREfast會攔截cl編譯器 (cl.exe) 的調用,產生由一次檢查所有檔案所得的單一聯合清單,內容屬於XML格式。
偵測錯誤類別:
- 存儲器:記憶體泄露(memory leak)。
- 資源:沒能即時釋放資源。
- 函式使用方式:不正確的函式引數、使用某個過時函式的情況。
- 浮點運算狀態
- 優先運行規則
- 核心模式程式安全性考量
PREfast的工作
- 變數未初始化
void init() { int a; int b; b = a;}
- 運算對象優先權的問題
void priority() { int a = 1; int b = 1; int c = 1; if(a & b == c) return ;}
- 存儲器溢出問題
void overrun() { char buf[100]; char buf2[200]; int i = 100; sprintf(buf, "size%d" , i); strcpy(buf, buf2);}
- 死循環
void infinite_loop() { int i; for(i = 100 ; i >= 0 ; i ++ ) { ; }}
- 運算對象誤用
void op_misuse() { int a = 2; if (a = 2) return ;}