1、BoundsChecker
或許你還不知道大名頂頂的Nu-Mega,但必定據說過他們的產品SoftICE,BoundsChecker也是這家公司的產品。與Visual C++配合使用,聽說威力強大。本人和沒有實際用過,在此複製一下百度百科的簡介,好有個簡單的認識。
BoundsChecker是一個運行時錯誤檢測工具,它主要定位程序運行時期發生的各類錯誤。它經過駐留在Visual C++開發環境內部的自動處理調試程序來加速應用程序的開發,縮短產品發佈時間。BoundsChecker對於編程中的錯誤(大多數是C++中特有的)提供了清晰的詳細的分析。它可以檢測和診斷出在靜態,堆棧內存中的錯誤以及內存和資源泄漏問題。在運行狀態下BoundsChecker驗證超過8700APIs和OLE方法,包括最新的Windows APIs,ODBC,ActiveX,DirectX,COM和Internet APIs。
BoundsChecker採用一種被稱爲Code Injection的技術,來截獲分配內存和釋放內存函數的調用。簡單的說,當你的程序開始運行時,BoundsChecker的DLL被自動載入進程的地址空間,而後它會修改進程中分配和釋放內存的函數的調用,讓這些調用首先轉入它的代碼。BoundsChecker在作這些動做時,無需修改被調試程序的源代碼或工程配置文件,這使得它使用很是的簡便、直接。
程序員在開發過程當中可能會常常遇到這樣的問題:調試時語法沒有問題,代碼也沒有錯誤,但程序運行就是不正常甚至死機,其實這有多是邏輯錯誤引發的內存溢出或資源泄露等問題。這些錯誤通常是不容易檢測出來的。而這些錯誤就是BoundsChecker錯誤檢測之一。
經過對被測程序的操做,BoundsChecker提供詳細的,清晰的錯誤分析;自動查明靜態的堆棧錯誤及內存、資源泄漏,而且可以迅速定位出錯的源代碼,即便在沒有源代碼的狀況下也能檢查第三方組件的錯誤。
BoundsChecker能檢測的錯誤包括:
(1)指針操做和內存、資源泄漏錯誤
好比:內存泄露;資源泄漏;對指針的錯誤操做。
(2)內存操做方面的錯誤
好比:內存讀、寫溢出;使用爲初始化的內存。
(3)API函數使用錯誤
2、Valgrind
Valgrind是一款守GNU通用公共許可證條款的自由軟件,主要用於內存調試、內存泄漏檢測以及性能分析。Valgrind這個名字取自北歐神話中英靈殿的入口。最初做者是Julian Seward,他於2006年因爲在開發Valgrind上的工做得到了第二屆Google-O'Reilly開源代碼獎。
目前的3.7.0版支持X86/Linux, AMD64/Linux, ARM/Linux, PPC32/Linux, PPC64/Linux, S390X/Linux, ARM/Android (2.3.x), X86/Darwin and AMD64/Darwin (Mac OS X 10.6 and 10.7)等操做系統。
Valgrind工具包包含多個工具:
1. Memcheck 工具主要檢查下面的程序錯誤:
使用未初始化的內存 (Use of uninitialised memory)
使用已經釋放了的內存 (Reading/writing memory after it has been free’d)
使用超過 malloc分配的內存空間(Reading/writing off the end of malloc’d blocks)
對堆棧的非法訪問 (Reading/writing inappropriate areas on the stack)
申請的空間是否有釋放 (Memory leaks – where pointers to malloc’d blocks are lost forever)
malloc/free/new/delete申請和釋放內存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])
src和dst的重疊(Overlapping src and dst pointers in memcpy() and related functions)
2. Callgrind
Callgrind收集程序運行時的一些數據,函數調用關係等信息,還能夠有選擇地進行cache 模擬。在運行結束時,它會把分析數據寫入一個文件。callgrind_annotate能夠把這個文件的內容轉化成可讀的形式。
3. Cachegrind
它模擬 CPU中的一級緩存I1,D1和L2二級緩存,可以精確地指出程序中 cache的丟失和命中。若是須要,它還可以爲咱們提供cache丟失次數,內存引用次數,以及每行代碼,每一個函數,每一個模塊,整個程序產生的指令數。這對優化程序有很大的幫助。
4. Helgrind
它主要用來檢查多線程程序中出現的競爭問題。Helgrind 尋找內存中被多個線程訪問,而又沒有一向加鎖的區域,這些區域每每是線程之間失去同步的地方,並且會致使難以發掘的錯誤。Helgrind實現了名爲」 Eraser」 的競爭檢測算法,並作了進一步改進,減小了報告錯誤的次數。
5. Massif
堆棧分析器,它能測量程序在堆棧中使用了多少內存,告訴咱們堆塊,堆管理塊和棧的大小。Massif能幫助咱們減小內存的使用,在帶有虛擬內存的現代系統中,它還可以加速咱們程序的運行,減小程序停留在交換區中的概率。
3、GFlags 和 PageHeap
微軟提供的一套工具,在此不過多解釋了,收集幾個文檔位置,供參考。
1. msdn GFlags工具相關主題
2. 如何在 Windows XP 和 Windows 2000 中使用 Pageheap.exe (微軟幫助和支持文章編號:286470)
3. 如何使用 PageHeap 實用程序來檢測 Microsoft Visual c + + 項目中的內存錯誤 (微軟幫助和支持文章編號:264471)
4. CSDN rj20092010 文章:淺談MFC內存泄露檢測及內存越界訪問保護機制
程序員