[發明專利]基于內存池的內存錯誤調試方法和裝置在審
| 申請號: | 201810829432.1 | 申請日: | 2018-07-25 |
| 公開(公告)號: | CN109086205A | 公開(公告)日: | 2018-12-25 |
| 發明(設計)人: | 邸忠輝 | 申請(專利權)人: | 鄭州云海信息技術有限公司 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36;G06F9/50 |
| 代理公司: | 北京集佳知識產權代理有限公司 11227 | 代理人: | 王寶筠 |
| 地址: | 450018 河南省鄭州市*** | 國省代碼: | 河南;41 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 內存 內存管理信息 內存池 方法和裝置 錯誤調試 獲取目標 目標內存 調試 引用 內存管理結構 內存池管理 動態申請 釋放 更新 記錄 申請 發現 | ||
本申請實施例公開一種基于內存池的內存錯誤調試方法和裝置,該方法由內存池管理動態申請的內存,內存池中的每個內存由一個內存管理結構記錄內存管理信息,在引用、釋放目標內存時,可以獲取目標內存的內存管理信息,內存管理信息可以反映出是否出現內存錯誤以及內存錯誤的位置,這樣,當出現內存錯誤時便可以根據內存管理信息對內存錯誤進行調試。在未出現內存錯誤時,可以執行引用、釋放目標內存的操作,并更新內存管理信息,以便后續利用更新后的內存管理信息執行獲取目標內存的內存管理信息的步驟。可見,通過內存池中記錄的內存管理信息可以發現和定位這些比較復雜的內存錯誤,從而對復雜的內存錯誤進行調試。
技術領域
本申請涉及數據存儲領域,特別是涉及一種基于內存池的內存錯誤調試方法和裝置。
背景技術
在存儲系統中,普遍采用編程語言例如C語言或C++語言來實現內存管理,這種內存管理方法需要的代碼量十分龐大、且邏輯實現復雜,導致經常出現引用已釋放內存、內存重復釋放、內存泄漏、內存緩沖區溢出等內存錯誤,這些內存錯誤可能會影響程序的正常運行,因此,需要對這些內存錯誤進行調試,以修正這些內存錯誤。
目前,內存錯誤調試的方法主要有代碼走查,使用靜態分析工具lint等工具分析代碼,單元測試、系統測試及分析日志log等。
這些方法都是對代碼邏輯進行分析,僅能對一些簡單的內存錯誤進行調試,一旦代碼邏輯比較復雜,內存錯誤隱藏在復雜的代碼邏輯之中,那么,這些方法將難以發現和定位這些比較復雜的內存錯誤,從而難以對復雜的內存錯誤進行調試。
發明內容
為了解決上述技術問題,本申請提供了一種基于內存池的內存錯誤調試方法和裝置,該方法通過內存池中記錄的內存管理信息可以發現和定位這些比較復雜的內存錯誤,從而對復雜的內存錯誤進行調試。
本申請實施例公開了如下技術方案:
第一方面,本申請實施例提供了一種基于內存池的內存錯誤調試方法,內存池管理動態申請的內存,所述內存池包括至少一個內存空閑鏈表,每個內存空閑鏈表中包括至少一個鏈表節點,每個鏈表節點對應的內存由一個內存管理結構記錄內存管理信息,所述方法包括:
獲取目標內存的內存管理信息,所述內存管理信息中至少包括內存分配、內存引用和內存釋放的相關信息;
若根據所述內存管理信息確定所述目標內存出現內存錯誤,則對所述內存錯誤進行調試;
若根據所述內存管理信息確定所述目標內存未出現內存錯誤,則更新所述內存管理信息,將更新后的內存管理信息記錄在目標內存對應的內存管理結構中,以便后續利用更新后的內存管理信息執行所述獲取目標內存的內存管理信息的步驟。
可選的,在所述獲取目標內存的內存管理信息之前,所述方法還包括:
獲取內存分配請求,所述內存分配請求中包括內存大小信息;
根據所述內存分配請求確定內存池中對應的內存空閑鏈表;
取下所述內存空閑鏈表中的一個節點,將所述節點插入到已分配的內存鏈表中;
初始化所述節點的內存管理信息及內存的校驗值。
可選的,若所述內存管理信息中包括內存引用的相關信息,所述目標內存具有校驗值,在引用目標內存時,所述若根據所述內存管理信息確定所述目標內存出現內存錯誤,則對所述內存錯誤進行調試,包括:
根據所述內存管理信息確定所述目標內存是否已被釋放;
若是,則觸發程序崩潰;
若否,則根據所述目標內存的校驗值確定是否存在緩沖區溢出;
若存在,則觸發程序崩潰。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于鄭州云海信息技術有限公司,未經鄭州云海信息技術有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201810829432.1/2.html,轉載請聲明來源鉆瓜專利網。





