一、為什麼寫這篇東西
自己在使用BCB5寫一些程序時需要檢查很多東西,例如內存洩漏、資源是否有釋放等等,在使用了很多工具後,發覺BCB5本身自帶的工具--CodeGuard,非常不錯,使用也挺方便的,但是摸索了很久(以及翻查了一些資料,包括HELP)才算是會用了。寫這篇文章的目的希望有這方面的問題的朋友可以借鑒一下,大家互相學習,共同進步。我的聯系方法:Email:[email protected],希望志同道合的朋友來信互相交流。以下這篇文章算是拼湊出來的一篇文章,一些資料是在書上找的,一些是在HELP上看到了。首先聲明本人的語文及英語水平十分有限,有寫錯或者翻譯錯的地方,還望給位指出。特別感謝XX的愛情幫我校對……
二、什麼是CodeGuard
CodeGuard是在是C++Builder5才出現的一個工具。CodeGuard是C++Builder中一個程序在運行時期的檢查器,用於檢查內存或者資源的使用,以及函數調用的驗證。
CodeGuard可以檢測到以下的程序運行期錯誤:
非法的內存釋放。
無效的句柄或者文件流。
非法指針。
使用已被釋放的指針。
內存洩漏。
分配但最後沒有釋放的內存變量。
傳遞給函數的不正確的參數(包括VCL以及Win32函數)。
函數返回值的錯誤。(包括VCL以及Win32函數)。
例如:在應用程序中試圖多次釋放相同的資源(或者已經釋放了的資源)、試圖訪問已經被釋放的內存。
三、在BCB5中怎樣使用CodeGuard--配置CodeGuard
如果要使用CodeGuard的話,必須有些代碼編譯進你的應用程序,所以在改變以下這些設置後。必須全部重新編譯(切記切記!!!)。第一、打開應用程序的工程選項的CodeGuard頁框,把CodeGuard Validation前面打勾.
工程選項裡,還有其他三個選項。第一個選項允許CodeGuard檢查指向局部、全局和靜態變量的無效指針和數據溢出。第二個選項允許CodeGuard檢測對非法的(無效的、已刪除的)對象的方法的調用。第三個選項允許CodeGuard驗證內嵌指針的訪問(在某些資料上說,開啟這個選項會造成程序執行速度變得很慢,我測試過了,如果工程不是很大的話不是很明顯,可以接受。)一般的調試是開打所有的選項(默認選擇也是全部打開)。
通過CodeGuard的配置工具,可以配置CodeGuard的一些選項,在命令行方式執行CGCONFIG.EXE。可以見到一個對話框.
Preferences標簽頁用於設置CodeGuard這個工具的全局選項。Enable選項可以在應用程序不重新編譯的情況下使用或者不使用CodeGuard,一般來說是都是啟用她。如果使用CodeGuard的話,建議設置工程選項來禁止或者使用CodeGuard。Stack fill frequency填充棧頻率是檢測對運行期棧的無效訪問。Report和Error Message Box選項是設置CodeGuard報告錯誤的方式。在Report裡,Stiatistics選項打開CodeGuard輸出分配和釋放內存的統計表、被使用的Win32API的調用、資源的使用情況,並在日志文件中加上一個模塊列表,以便檢查錯誤。Resource Leaks選項是告訴CodeGuard在應用程序結束後報告資源洩漏的情況。選定了Error Message Box選項後,當應用程序不在IDE裡運行時,如果CodeGuard檢測到錯誤信息,那麼將采用一個對話框的方式告訴使用者。其他選項一般不常用,可以參見C++Builder的聯機HELP。
CodeGuard配置工具中的Resource Options和Function Options頁框允許用戶對應用程序的資源、文件和函數調用設置各種跟蹤選項。除非特殊的原因需要改變默認的配置,否則使用缺省的設定就行了。Function Options頁上有一個比較常用的選項就是記錄一個特定函數的每次調用情況。
Ignored Modules頁框允許你告訴CodeGuard,當檢測的時候可以忽略一些運行期的錯誤(一般是指某些DLL或者包)。這個選項一般不常用。