我有一個簡單的C++服務,它從文件中讀取文本並通過網絡發送它。隨着時間的推移,該服務的內存消耗在客戶現場增加。在QA測試中沒有觀察到這種行爲。使用WinDbg打印內存對象
我想知道是否有可能在任何給定的時間提取內存中的所有字符串對象。
是否有可能自動執行此過程,以便我可以在不同時間從客戶那裏獲取轉儲數據,並在每個時間查找內存的大小或內容並比較結果。
我有一個簡單的C++服務,它從文件中讀取文本並通過網絡發送它。隨着時間的推移,該服務的內存消耗在客戶現場增加。在QA測試中沒有觀察到這種行爲。使用WinDbg打印內存對象
我想知道是否有可能在任何給定的時間提取內存中的所有字符串對象。
是否有可能自動執行此過程,以便我可以在不同時間從客戶那裏獲取轉儲數據,並在每個時間查找內存的大小或內容並比較結果。
這聽起來像你有內存泄漏。我只使用windbg來調試託管應用程序。也許這個Link可以幫助你一點。
對於C++的答案是否定的(在C#是一個不同的故事)。在C++的世界裏,如果你懷疑你有泄漏,你可能想在發生「泄漏」之前在進程中啓用用戶模式堆棧跟蹤(gflags.exe中的+ ust)。發生泄漏之後,獲得過程轉儲並檢查它。爲了檢查它(我假設你在這個響應中使用本地窗口堆),你將需要遍歷堆結構以找出分配的位置,然後檢查堆棧回溯以獲取最常見分配大小的抽樣。
例子。
UMDH消耗由+ ust創建的數據。缺點是你必須在目標機器上設置符號。這是我剛抓住轉儲的主要原因,將其轉移到我的工具機器並查看那裏的數據。 – JasonE
這是一個棘手的部分,是的 - 同樣的事情適用於ETL,你必須有目標機器的二進制副本進行匹配,並且UMDH不記錄校驗和信息來查找它 –
是的朋友,它看起來像只發生在客戶環境中的泄漏。感謝鏈接它有有用的信息。 – Geek