System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內的位置。 參數名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術實現步驟摘要】
本公開涉及內存管理,尤其涉及一種動態內存釋放異常的診斷定位方法、裝置、電子設備及計算機可讀存儲介質。
技術介紹
1、相關技術中,動態內存釋放異常包括由于忘記釋放動態開辟的空間導致的內存泄漏、對同一動態內存的多次釋放等,而動態內存釋放異常會導致系統性能下降甚至崩潰?,F有技術中,可以采用開源內存檢測工具在運行時進行輔助分析,判斷內存釋放情況,但該開源內存檢測工具需要在單獨的開源環境中運行;也可以通過編譯時插樁代碼實現運行時的內存檢測,但是該方法也需要部署開源環境,并重新使用內存檢測工具編譯,才能進行分析,難以適用于多種多樣的客戶環境。
2、因此,亟需一種能夠進行運行時的內存異常釋放檢測,適配多種應用場景的動態內存釋放異常的診斷定位方法。
技術實現思路
1、為克服相關技術中存在的問題,本公開提供一種動態內存釋放異常的診斷定位方法、裝置、電子設備及計算機可讀存儲介質。
2、根據本公開實施例的第一方面,提供一種動態內存釋放異常的診斷定位方法,包括:定制動態鏈接庫并使待檢測應用程序的環境變量指向所述動態鏈接庫的路徑,所述動態鏈接庫中包括有內存分配函數和內存釋放函數;運行所述待檢測應用程序,通過動態內存接口調用所述動態鏈接庫,定位動態內存釋放異常的代碼,輸出定位結果。
3、在一些實施例中,所述動態內存接口包括動態內存申請接口和動態內存釋放接口,在動態內存分配時通過內存數據結構記錄線程id、內存地址和內存分配大小,在動態內存釋放時通過對應內存數據結構是否存在觸發
4、在一些實施例中,在通過動態內存申請接口調用所述動態鏈接庫時,包括:通過所述動態內存申請接口調用所述內存分配函數,檢測資源使用是否為空;若所述資源使用為空,則通過內置全局靜態變量進行資源初始化,并創建內存數據結構,進行動態內存分配;若所述資源使用不為空,則獲取當前線程id、內存地址和內存分配大小,并寫入內存數據結構,進行動態內存分配。
5、在一些實施例中,所述創建內存數據結構包括:獲取所有線程的線程id,并對所述線程id進行哈希操作,得到id數組;根據所述id數組中的線程id獲取線程對應的內存塊大小,構建內存塊尺寸數組;基于所述內存塊尺寸數組,對相同尺寸的內存塊的位置信息進行哈希處理,得到位置數組;根據相同尺寸的內存塊構建鏈表,并將所述位置數組作為鏈表頭結點,形成內存數據結構。
6、在一些實施例中,在通過動態內存釋放接口調用所述動態鏈接庫時,包括:通過動態內存釋放接口調用所述內存釋放函數,獲取待釋放線程的線程id和內存地址;根據所述線程id和內存地址,查找對應待釋放線程的內存數據結構是否存在;若不存在對應的內存數據結構,則內核產生中斷信號,完成內存釋放異常檢測,根據所述線程id和內存地址輸出定位結果;若存在對應的內存數據結構,則根據所述內存地址釋放內存,并判斷所述內存數據結構是否為空;其中,若所述內存數據結構為空,則清理所述動態鏈接庫中初始內存數據結構的資源;若所述內存數據結構不為空,則釋放所述內存數據結構。
7、在一些實施例中,所述根據所述線程id和內存地址輸出定位結果,包括:根據所述線程id和內存地址生成核心轉儲文件,通過gdb解析,形成調用棧;根據所述調用棧,定位待釋放線程對應的異常代碼。
8、在一些實施例中,所述創建內存數據結構之后,還包括:對所述內存數據結構進行加鎖操作。
9、根據本公開實施例的第二方面,提供一種動態內存釋放異常的診斷定位裝置,包括:動態鏈接庫定制模塊,用于定制動態鏈接庫并使待檢測應用程序的環境變量指向動態鏈接庫的路徑,所述動態鏈接庫中包括有內存分配函數和內存釋放函數;定位結果輸出模塊,用于運行所述待檢測應用程序,通過動態內存接口調用所述動態鏈接庫,定位動態內存釋放異常的代碼,輸出定位結果。
10、根據本公開實施例的第三方面,提供一種電子設備,包括:處理器;用于存儲所述處理器可執行指令的存儲器;所述處理器,用于從所述存儲器中讀取所述可執行指令,并執行所述指令以實現本公開第一方面所提供的動態內存釋放異常的診斷定位方法。
11、根據本公開實施例的第四方面,提供一種計算機可讀存儲介質,其上存儲有計算機程序指令,該程序指令被處理器執行時實現本公開第一方面所提供的動態內存釋放異常的診斷定位方法的步驟。
12、本公開的實施例提供的技術方案可以包括以下有益效果:通過定制動態鏈接庫,并將待檢測應用程序的環境變量指向動態鏈接庫的路徑,實現待檢測應用程序和動態鏈接庫的連接,動態鏈接庫中包括有內存分配函數和內存釋放函數;運行待檢測應用程序,通過動態內存接口調用動態鏈接庫,定位動態內存釋放異常的代碼,輸出得到定位結果,采用動態鏈接庫實現待檢測應用程序的動態內存分配和釋放,使得動態鏈接庫的代碼復用性高,避免了對待檢測應用程序的編譯修改,實現了在內存分配和釋放過程中的異常檢測,且能夠適配各種應用場景,提高了動態內存釋放異常檢測的靈活性。
13、應當理解的是,以上的一般描述和后文的細節描述僅是示例性和解釋性的,并不能限制本公開。
本文檔來自技高網...【技術保護點】
1.一種動態內存釋放異常的診斷定位方法,其特征在于,包括:
2.根據權利要求1所述的動態內存釋放異常的診斷定位方法,其特征在于,所述動態內存接口包括動態內存申請接口和動態內存釋放接口,在動態內存分配時通過內存數據結構記錄線程ID、內存地址和內存分配大小,在動態內存釋放時通過對應內存數據結構是否存在觸發產生錯誤信號實現定位動態內存釋放異常的代碼。
3.根據權利要求2所述的動態內存釋放異常的診斷定位方法,其特征在于,在通過動態內存申請接口調用所述動態鏈接庫時,包括:
4.根據權利要求3所述的動態內存釋放異常的診斷定位方法,其特征在于,所述創建內存數據結構包括:
5.根據權利要求2所述的動態內存釋放異常的診斷定位方法,其特征在于,在通過動態內存釋放接口調用所述動態鏈接庫時,包括:
6.根據權利要求5所述的動態內存釋放異常的診斷定位方法,其特征在于,所述根據所述線程ID和內存地址輸出定位結果,包括:
7.根據權利要求3所述的動態內存釋放異常的診斷定位方法,其特征在于,所述創建內存數據結構之后,還包括:
8
9.一種電子設備,其特征在于,包括:
10.一種計算機可讀存儲介質,其上存儲有計算機程序指令,其特征在于,該程序指令被處理器執行時,以實現所述權利要求1-7中任一所述的動態內存釋放異常的診斷定位方法的步驟。
...【技術特征摘要】
1.一種動態內存釋放異常的診斷定位方法,其特征在于,包括:
2.根據權利要求1所述的動態內存釋放異常的診斷定位方法,其特征在于,所述動態內存接口包括動態內存申請接口和動態內存釋放接口,在動態內存分配時通過內存數據結構記錄線程id、內存地址和內存分配大小,在動態內存釋放時通過對應內存數據結構是否存在觸發產生錯誤信號實現定位動態內存釋放異常的代碼。
3.根據權利要求2所述的動態內存釋放異常的診斷定位方法,其特征在于,在通過動態內存申請接口調用所述動態鏈接庫時,包括:
4.根據權利要求3所述的動態內存釋放異常的診斷定位方法,其特征在于,所述創建內存數據結構包括:
5.根據權利要求2所述的動態內...
【專利技術屬性】
技術研發人員:王波,熊磊,許倜,
申請(專利權)人:國科礎石重慶軟件有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。