所以我有一個正在泄漏內存的.NET Windows應用商店應用程序。我能做些什麼呢?我用於jetBrains或Red-Gate/ANTS的桌面應用程序的剖析器工具不支持Metro應用程序(或現在它們是否?)如何在Windows Store應用程序中調試內存泄漏?
回答
對於最簡單的方法 - 跳到底部以瞭解有關執行此操作的說明與Visual Studio 2013年
現在可能有一些新的工具 - 也許某事在更新Visual Studio和我很想找到關於這些,但我想的WinDbg取得了一些成功之前。下面是我對如何做到這一點的老調:
1. Create dump file from process manager
2. Run WinDbg (X64)
3. File/Open Crash Dump… (Crtl+D)
4. Run following:
lm
.load C:\windows\Microsoft.NET\Framework64\v4.0.30319\sos.dll
.sympath SRV*c:\localsymbols*http://msdl.microsoft.com/download/symbols
.symfix
.reload
!dumpheap -stat
需要注意的是,如果你的過程中,如果86,特別是如果你在Windows的64位版本上運行 - 你需要使用調試器的x86版( WinDbg提供兩個版本)來保存轉儲。 SOS是WinDbg的託管內存調試擴展,不支持調試x86位進程的x64位轉儲。然後,您還需要分別更新SOS路徑,所以它看起來是這樣的:
.load C:\windows\Microsoft.NET\Framework\v4.0.30319\sos.dll
可能不是所有的這些命令是必要的,但是這是對我工作。現在
你可以發現,似乎在太多情況下
!DumpHeap -type TypeName
存在的對象的類型,其中類型名稱是該類型只是名字 - 沒有必要完全合格的命名空間。現在
你可以查閱一下保持該對象在內存中:因爲應用程序似乎得到暫停,當你一個調試器附加
!GCRoot Object_Address
現場調試並沒有爲我工作。我想我看到了一個讓應用程序停留在內存中的選項,但是我忘記了它的位置,但是對於內存分析 - 查看靜態轉儲文件可能就足夠了。
您可以下載WinDbg,從而使Windows SDK中的一部分,或作爲here的「Windows調試工具」獨立下載。
要創建轉儲文件 - 轉到任務管理器,右鍵單擊某個過程並選擇「創建轉儲文件」。
一些更多的鏈接:
http://msdn.microsoft.com/en-us/library/bb190764.aspx
*編輯
根據.NET Memory Allocation Profiling with Visual Studio 2012由Stephen Toub - PerfView工具支持在分析.NET Windows應用商店中的應用程序泄漏。與Vance Morrison here查看文章和視頻演練。
* EDIT 2
的Visual Studio 2013預覽增加了一個新的選擇,分析從轉儲文件管理的內存堆。要做到這一點 - 只需在Visual Studio調試器中暫停應用程序,通過調試/保存轉儲另存爲當前轉儲,然後恢復執行並使用您的應用程序,直到發生可疑泄漏並再次轉儲。然後轉到文件/打開/文件並打開第二個轉儲文件。在「操作」面板中的轉儲摘要右側,您會看到一個「調試託管內存」操作。選擇它,然後在「Select Baseline」中選擇你的第一個轉儲文件。您將看到託管堆上的對象列表,按類型分組,並帶有計數差異。請注意,您通常會首先查看具有低的非零計數差異的對象以跟蹤單個泄漏源。您可以通過展開參考圖視圖中的樹來深入查看對象列表,並查看將它們保留在內存中的內容。
Telerik的JustTrace支持Windows應用商店的應用程序:http://www.telerik.com/products/memory-performance-profiler/justtrace-features.aspx
謝謝!我必須嘗試! –
他們啾啾我說它只支持跟蹤事物的管理方面,但對於很多人來說這應該足夠了。 –
這個問題被標記爲.net,所以我忘了提及它不能在WinJS中使用(在最新版本中)。在某些時候我不會感到驚訝。 – kodefuguru
- 1. Windows Store應用程序BackgroundTask內存泄漏
- 2. 在Monotouch應用程序中調試內存泄漏
- 3. 調試應用程序中的巨大內存泄漏
- 4. 調試Win32 API應用程序內存泄漏
- 5. Android:如何測試應用程序中的內存泄漏?
- 6. 應用程序中的內存泄漏
- 7. 如何避免應用程序中存在內存泄漏?
- 8. 調試內存泄漏
- 9. 調試NSJSONSerialization內存泄漏
- 10. 調試JVM內存泄漏
- 11. Python:內存泄漏調試
- 12. 在.NET應用程序中測試內存泄漏
- 13. 調試內存泄漏nodejs
- 14. 如何測試Web應用程序的內存泄漏?
- 15. 我如何測試iphone應用程序的內存泄漏?
- 16. 試圖追蹤在cocos2D應用程序中的內存泄漏
- 17. iPhone/iPad應用程序內存泄漏
- 18. gsoap內存泄漏C應用程序
- 19. iphone應用程序NSNumber內存泄漏
- 20. Javascript應用程序 - 泄漏內存
- 21. iPhone應用程序內存泄漏
- 22. MKMapView內存泄漏iPhone應用程序
- 23. android應用程序內存泄漏
- 24. 通用Windows應用程序Webview內存泄漏 - 清除緩存
- 25. NodeJS 0.3.1應用程序泄漏內存
- 26. 在Internet Explorer中調試內存泄漏
- 27. WinForms應用程序內存泄漏
- 28. Quartz.net調度程序內存泄漏
- 29. ASP.Net應用程序池內存泄漏
- 30. 如何在WPF應用程序中查找內存泄漏
更多更新鮮的鏈接:http://blogs.microsoft.co.il/blogs/sasha/archive/2012/10/15/diagnosing-memory-leaks-in -managed-windows-store-apps.aspx –
也可以使用wpr(Windows Performance Recorder)命令和wpa(Windows性能分析器)讀取的etl(Event Trace Log)文件來查找泄漏,儘管我還沒有玩過它。檢查這些可能包含一些有用信息的鏈接http://www.idigitalhouse.com/Blog/?p=155 http://blogs.msdn.com/b/ntdebugging/archive/2012/11/30/troubleshooting-pool -leaks-part-7-windows-performance-toolkit.aspx –
人們應該注意,「調試託管內存」選項僅在Visual Studio 2013 Ultimate中可用,轉儲是從.NET 4.5進程創建的。更多信息:http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/20/using-visual-studio-2013-to-diagnose-net-memory-issues-in-production.aspx –