它可以發現的主要錯誤有:(摘自purify在線幫助html/getstarted_pplus/2-purify.html)
· Reading or writing beyond the bounds of an array
數組讀寫越界
· Using uninitialized memory
使用未初始化的內存
· Reading or writing freed memory
讀寫未分配的內存
· Reading or writing beyond the stack pointer
棧指針讀寫越界
· Reading or writing through null pointers
讀寫空指針
· Leaking memory and file descriptors
內存和文件描述符泄漏
Purify還檢查一些其他錯誤,如調用函數參數錯誤等。
由于purify對內存的分析和記錄是在程序運行完成以后才顯示,如果需要在程序運行時觀測就很不方便,所以Purify也提供外接API函數幫助在運行時顯示內存狀況以調試程序。它提供的接口說明請參見我的另一篇關于Purify的文檔purify的API和提示信息代號。
Purify的使用及注意事項:
1. 對于編譯執行程序,如gcc –g testpurify.c –o tpurify命令,如果需要對testpurify使用purify進行調試,那么只要在命令前加入purify即可。如:purify gcc –g testpurify.c –o tpurify。這樣,當運行testpurify程序時,即會自動彈出purify觀察器的界面如圖1(命令行模式下只是列出purify對程序運行的統計信息):
圖1
purify不能用于動態鏈接庫的編譯命令。如下用法是錯誤的:
purify –shared –fpic libtest.c –o libtest.so
注意:如果在安裝purify時是指定的purify license server模式進行安裝(在安裝中輸入的是證書服務器的地址,如27000@licenses.com),那么在加入purify命令進行編譯程序時,網絡必須能連接到指定的證書服務器,否則無法使用purify。
2. 如果程序中調用了共享庫,那么,如果修改了共享庫后,需要使用purify命令對調用了共享庫的程序進行重新編譯,才能體現修改。[Page]
3. purify能夠對發現的錯誤直接在源文件中進行定位,如圖2中在main函數旁邊顯示的[hello_world.c:25]:
圖2
可以在purify中直接對定位的錯誤進行修改,點擊圖標或者main下邊的鉛筆符號即可,彈出如圖3的編輯框: 注意:如果錯誤發生的行號沒有在觀察器中顯示,請檢查你在編譯時是否指定了-g參數。
圖3
4. 注意到圖2中有個ABR的字母縮寫,它表示數組讀錯誤。Purify有很多描述錯誤的字母縮寫,請參加文檔<<purify的API和提示信息代號.doc>>。
5. 現在介紹下purify的工具欄:
(1)(2)按鈕是用于在purify觀察器中導航,將最近有或標志的行高亮顯示。
按鈕(3)用于將有標志的項展開,按鈕(4)用于將有標志的項收縮。
按鈕(5)是用于打開編輯器。
按鈕(6)(7)(8)是使用cleartool工具(沒有安裝)。
按鈕(9)用于設置哪些錯誤信息不進行展開,以節省視圖,關注更重要的錯誤信息。
按鈕(10)是調用幫助。
按鈕(11)是下一個內存泄漏提示標記。
按鈕(12)是調用PureCovery。
按鈕(13)是調用ClearQuest工具。 在項目開發測試中適用purify的領域有:
1. 使用purify提供的API函數,在程序運行的必要環節在觀察器中顯示需要獲得的內存狀況或打印消息。
2. 對于運行環境要求簡單的程序,如可以在自己虛擬機上運行的單機程序,可以使用purify進行白盒測試,查找內存泄漏等運行時錯誤。
而對硬件有要求的程序,則不大可能使用purify。比如對嵌入式平臺的程序,我們無法使用purify。
原文轉自:http://www.anti-gravitydesign.com