window除錯學習3 記憶體除錯

2021-06-25 22:11:19 字數 944 閱讀 5519

動態記憶體分配錯誤有以下兩種基本型別:記憶體錯誤和記憶體洩露。

當乙個指標或者該指標所指向的記憶體單元成為無效單元,或者記憶體中分配的資料結構被破壞時,就會造成記憶體錯誤。指標未被初始化、指標被初始化為乙個無效位址、指標被不小心錯誤地修改、在與指標相關聯的記憶體區域被釋放以後使用該指標(這種指標被稱為虛懸(dangling)指標),這些都會使指標變為無效指標。當通過乙個錯誤指標或者虛懸指針對記憶體進行寫入,或者是將指標強制轉換為不匹配的資料結構,又或者是寫資料越界的時候,記憶體本身也會遭到破壞。刪除未被初始化的指標,刪除非堆指標、多次刪除同一指標或者覆蓋乙個指標的內部資料結構,都會造成記憶體分配系統錯誤。總之,c++中的記憶體錯誤有無數種可能發生的原因。

在除錯版本裡,對記憶體的寫越界時,如果是寫上溢就會收到「damage: after block」(記憶體破壞:在塊的後面)的跟蹤訊息,如果是寫下溢就會收到「damage: before block」(記憶體破壞:在塊的前面)的跟蹤訊息。但是,只有在記憶體的破壞發生在資料區的前後四個位元組裡時,上面的訊息才會出現。如果寫溢位超過了保護位元組,對記憶體的寫越界不會被發現。因為記憶體的崩潰通常就發生在記憶體破壞的後面,所以你可以使用資料斷點對導致崩潰的**進行跟蹤。

記憶體洩漏在被動態分配的記憶體沒有被釋放的時候產生。有很多種情況會導致記憶體地漏,例如沒有在全部的執行路徑中釋放記憶體(特別是在那些具有多個返回語句和具有異常丟擲的函式中),沒有在析構程式中釋放所有的記憶體,或者是忘記將基類析構函式設記為虛函式,還有可能是很簡單的情形:忘記釋放記憶體。

怎樣檢視記憶體洩漏:

在記憶體中,「vm size」表示程序在整體上的記憶體使用量(包括位於物理記憶體內部和外部的記憶體),而「mem usage」表示程序的物理記憶體使用量(也稱為程序的工作集)。通常,發生記憶體漏洞的徵兆就是在虛擬記憶體上發生了增長,而不是在工作集上發生了波動。這個可以在任務管理器中檢視。

window除錯學習2 事後除錯

事後除錯有兩個最基本的目標 1發現程式是在 崩潰的 2找出導致程式崩潰的原因。簡單地說,就是要找到程式中導致崩潰的指令位址。轉儲檔案是程序狀態的乙個靜態快照。因此,在轉儲檔案上設定斷點並進行單步除錯是不可能的。通過轉儲檔案來進行除錯可以作為一種手工除錯方式。在手工除錯方式中,我們只能檢視機器的狀態,...

除錯記憶體 C C 程式除錯和記憶體檢測

程式出現錯誤很正常,乙個優秀的程式設計師必須學會除錯,發現錯誤並改正。減少程式錯誤最有效的方法是 在敲 之前,多花點時間思考,如何構造程式,資料結構和演算法,盡量把細節提前寫下來,可以嘗試著在紙上寫出核心 這樣可以減少今後修改 的時間。1 檢查,重新閱讀程式,排除比較明顯的錯誤。編譯時帶上 wall...

記憶體除錯 MEMWATCH

記憶體除錯 memwatch 2 解壓後可以看到memwatch.c memwatch.h test.c等檔案 2 1 首先執行源 中的事例程式,檢測是否捕捉到記憶體錯誤,具體步驟如下 linux and other nixes with gcc gcc o test dmemwatch dmemw...