簡體   English   中英

如何創建內存轉儲並分析內存泄漏?

[英]How can I create memory dumps and analyze memory leaks?

我需要獲取以下內容來分析內存泄漏問題。 怎么做?

  • 孤立塊地址孤立呼叫

是否有任何好的資源/工具來了解/修復內存泄漏。

謝謝

如果您使用的是Linux,請使用valgrind 這是你的新好朋友。 我不確定Windows有哪些工具。

valgrind --leak-check =滿

如果您在Windows平台上, Microsoft Application Verifier會執行類似於valgrind的內存分析。

在Windows中,可以使用dbghelp.dllMiniDumpWriteDump函數。

崩潰時如何為我的進程創建minidump?

這對於跟蹤已部署應用程序中的錯誤非常有用,因為您可以使用調試符號來檢查沒有調試信息的字段中的小型轉儲。 但是,它對於跟蹤內存泄漏不是很有用。

對於Windows下的內存泄漏(當然除了商業工具,如PurifyBoundsCheckerGlowCode ),您可以使用免費的Windows調試工具包中的WinDbg以及Win32堆標記來跟蹤內存泄漏的源頭。

http://www.codeproject.com/KB/cpp/MemoryLeak.aspx

http://blogs.msdn.com/alikl/archive/2009/02/15/identifying-memory-leak-with-process-explorer-and-windbg.aspx

是的,正如J. Paulett所說,至少在Linux平台上,Valgrind是一個很好的起點。

在Windows上,我可以使用UIforETW獲得必要的詳細信息,該工具正在處理xperf的必要命令行參數。

這篇博客文章詳細解釋了所有內容: https : //randomascii.wordpress.com/2015/04/27/etw-heap-tracingevery-allocation-recorded/


記錄

步驟1:為每個進程名稱創建一個TracingFlags注冊表項並將其在“映像文件執行選項”中設置為“ 1”,該進程名稱將被跟蹤,以告訴Windows堆將其自身配置為在啟動具有該名稱的進程時進行跟蹤。 與“圖像文件執行選項”一樣,這些選項不會影響已經在運行的進程,只有設置了注冊表項時啟動的進程才會受到影響。

步驟2:使用“ -heap -Pids 0”咒語創建一個額外的ETW會話。 此會話將記錄啟動時TracingFlags注冊表項為“ 1”的進程的信息。

細節有些混亂,但是既然寫了UIforETW,我就不必費心解釋細節了,也不必假裝聽。 如果要記錄堆跟蹤,請使用UIforETW,如果要了解其工作原理,請查看代碼,或單擊“顯示命令”按鈕查看大部分臟衣服。

分析

可以使用WPA(Windows Performance Analyzer)檢查記錄,可以從UIforETW方便地啟動該記錄。

推薦的列是:進程,句柄,類型,堆棧。

分配類型為:

  • AIFO –分配內部釋放外部(提示,提示)
  • AOFI –分配的外部釋放內部
  • AOFO –已分配外部已釋放外部
  • AIFI –已分配內部已釋放內部

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM