BoundsChecker是一個Run-Time錯誤檢測工具,它主要定位程序在運行時期發生的各種錯誤。??????????????
BoundsChecker能檢測的錯誤包括:
?????? 1)指針操作和內存、資源泄露錯誤,比如:內存泄露;資源泄露;對指針變量的錯誤操作。
????2)內存操作方面的錯誤,比如:內存讀、寫溢出;使用未初始化的內存。???
?????? 3)API函數使用錯誤。
??? 使用BoundsChecker對程序的運行時錯誤進行檢測,有兩種使用模式可供選擇。一種模式叫做ActiveCheck,一種模式叫做FinalCheck。下面分別進行介紹。
??? 1)ActiveCheck是BoundsChecker提供的一種方便、快捷的錯誤檢測模式,它能檢測的錯誤種類有限,只包括:內存泄露錯誤、資源泄露錯誤、API函數使用錯誤。
??? 要想使用ActiveCheck模式來檢測程序的運行時錯誤,只需在VC++集成開發環境中打開BoundsChecker功能,然后從調試狀態運行程序即可。此時ActiveCheck會在后臺自動運行,隨時檢測程序是否發生了錯誤。下面說一下具體的使用步驟。
??? 首先,在VC++集成開發環境中打開你要對其進行測試的程序,同時保證項目處于Debug編譯狀態下。
?? 其 次,確保VC++集成開發環境中[BoundsChecker/Integrated Debugging]菜單項和[BoundsChecker/Report Errors and Events]菜單項處于被選中的狀態。只有這兩項被選中,BoundsChecker才會在程序運行過程中發揮作用。
最后,在VC++集成開發環境中選擇[Build/ Start Debug/Go]菜單命令,在Debug狀態下運行程序,ActiveCheck也在后臺開始運行了。
???? 2)FinalCheck具有BoundsChecker提供的所有檢錯功能。 FinalCheck 是ActiveCheck的超集,它除了能夠檢測出ActiveCheck能夠檢測出的錯誤,還能發現很多 ActiveCheck 不能檢測到的錯誤,包括:指針操作錯誤、內存操作溢出、使用未初始化的內存等等,并且,對于ActiveCheck能檢測出的錯誤,FinalCheck 能夠給出關于錯誤更詳細的信息。所以,我們可以把FinalCheck認為是ActiveCheck的功能增強版。我們付出的代價是:程序的運行速度會變 慢,有時甚至會變的很慢。
????? 要 想在FinalCheck 模式下測試程序,不能使用VC++集成開發環境提供的編譯連接器來構造程序,而必須要使用BoundsChecker提供的編譯連接器來編譯連接程序。當 BoundsChecker的編譯連接器編譯連接程序時,會向程序中插裝一些錯誤檢測代碼,這也就是FinalCheck能夠比ActiveCheck找 到更多錯誤的原因。
下面就介紹一下如何在FinalCheck模式下對程序進行測試:????
?1)在VC++集成開發環境中打開你所要測試的項目。???
? 2)由于要使用BoundsChecker的編譯連接器重新編譯連接程序,所以我們為BoundsChecker獨自構造一個文件夾。在VC++集成開發環境中,具體操作方法是:
??? A)點擊[ Build/Configurations...]菜單命令。
??? B)在彈出的對話框中點擊 Add 按鈕。在Configuration 編輯框中添入你為BoundsChecker創建的文件夾的名稱,這個名稱是任意的,比如我們取名為BoundChecker。
C)在 Copy settings from組合框中選中XXX—Win32 Debug項,然后點擊OK按鈕,接著點擊Close按鈕。
現在,我們已經為FinalCheck構造好了一個文件夾。
?? 3) 點擊[Build/Set Active Configuration…] 菜單命令,選中你剛才為BoundsChecker建的文件夾,然后點擊OK按鈕。這樣BoundsChecker編譯連接程序時生成的中間文件、可執行程序,都會被放到該文件夾下。
??? 4)選擇[BoundsChecker/Rebuild All with BoundsChecker] 菜單命令,對程序重新進行編譯連接,也就是在這時,BoundsChecker向被測程序的代碼中加入了錯誤檢測碼。編譯連接完成后, BoundsChecker會在你為BoundsChecker構造的文件夾中生成可執行文件。
????? 在FinalCheck模式下對程序進行檢測的準備工作都已經做好,這時可以啟動程序開始測試了,作步驟與在ActiveChecker模式下沒什么區別。具體步驟如下:
確保VC++集成開發環境中[BoundsChecker/ Integrated Debugging]菜單項和[BoundsChecker/Report Errors and Events]菜單項處于選中狀態。???? 好 了,BoundsChecker在FinalCheck模式下的使用也介紹完了。ActiveChecker、FinalCheck這兩種模式,比較而言 各有長短。ActiveChecker使用方便,只需在Debug狀態下直接運行程序即可,并且程序的運行速度較快,但檢測的錯誤種類有限; FinalCheck模式下,需要使用BoundsChecker的編譯連接器重新編譯連接生成可執行程序,并且程序的運行速度比較慢,但檢測的錯誤種 類、提供的錯誤相關信息要多于ActiveChecker。所以,何時使用何種模式,應根據當時的具體情況而定。