2012-12-05 18 views

Odpowiedz

12

Najprościej podejść - przejdź na sam dół, aby przeczytać o opisie tego zadania z Visual Studio 2013.


teraz nie mogą być pewne nowe narzędzia - może coś w zaktualizowanym programie Visual Studio i chciałbym znaleźć o nich, ale starałem WinDbg wcześniej z pewnym sukcesem. Oto moje stare notatki o tym, jak to zrobić:

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 

Zauważ, że jeśli proces jeśli x86, zwłaszcza jeśli działa na wersji x64 systemu Windows - trzeba będzie użyć wersji x86 debugera (WinDbg wysyła obie wersje), aby zapisać zrzut. SOS, który jest zarządzanym rozszerzeniem debugowania pamięci dla WinDbg, nie obsługuje debugowania zrzutów x64 bitów procesów x86 bitowych. Będziesz wtedy też trzeba zaktualizować SOS ścieżkę odpowiednio, więc wygląda to tak:

.load C:\windows\Microsoft.NET\Framework\v4.0.30319\sos.dll 

Być może nie wszystkie z tych poleceń są konieczne, ale to, co pracował dla mnie.

Teraz można znaleźć typ obiektu, który wydaje się istnieć w zbyt wielu przypadkach

!DumpHeap -type TypeName 

gdzie nazwa typu jest tylko nazwa rodzaju - nie w pełni wykwalifikowany nazw konieczne.

Teraz możesz sprawdzić, co trzyma ten obiekt w pamięci:

!GCRoot Object_Address 

żywo debugowanie nie działa dla mnie, ponieważ aplikacja wydaje się zawieszona po podłączeniu debuggera. Wydaje mi się, że widziałem opcję, która sprawiła, że ​​aplikacja pozostała w pamięci, ale zapomniałem, gdzie, ale w przypadku profilowania pamięci - wystarczy tylko statyczny plik zrzutu.


Można pobrać WinDbg jako część Windows SDK lub jako samodzielny pobrania „narzędzi debugowania systemu Windows” z here.

Aby utworzyć plik zrzutu, przejdź do Menedżera zadań, kliknij prawym przyciskiem myszy proces i wybierz "Utwórz plik zrzutu".


Niektórzy więcej linków:

http://blogs.microsoft.co.il/blogs/sasha/archive/2012/10/15/diagnosing-memory-leaks-in-managed-windows-store-apps.aspx

http://blogs.msdn.com/b/delay/archive/2009/03/11/where-s-your-leak-at-using-windbg-sos-and-gcroot-to-diagnose-a-net-memory-leak.aspx

http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/f3a3faa3-f1b3-4348-944c-43f11c339423

http://msdn.microsoft.com/en-us/library/bb190764.aspx

http://blogs.msdn.com/b/dougste/archive/2009/02/18/failed-to-load-data-access-dll-0x80004005-or-what-is-mscordacwks-dll.aspx


* EDIT

Według .NET Memory Allocation Profiling with Visual Studio 2012 Stephena Toub - PerfView narzędzie obsługuje analizę nieszczelności w NET Windows Store aplikacji. Sprawdź artykuł i relację wideo z Vance Morrison here.


* EDIT 2

Visual Studio 2013 Preview dodaje nową opcję do analizowania zarządzanych stosy pamięci z plików zrzutu. Aby to zrobić - po prostu wstrzymaj swoją aplikację w debugerze Visual Studio, zapisz bieżący zrzut przez Debug/Save Dump As, a następnie wznów wykonywanie i korzystaj z aplikacji do czasu, aż podejrzewasz wyciek i wykonaj kolejny zrzut. Następnie przejdź do Plik/Otwórz/Plik i otwórz drugi plik zrzutu. Po prawej stronie podsumowania zrzutu w panelu "Akcje" zobaczysz działanie "Pamięć zarządzana pamięcią". Wybierz, a następnie w "Wybierz linię bazową" wybierz swój pierwszy plik zrzutu. Zobaczysz listę obiektów na sterowanej sterty, pogrupowanych według typu, z różnicami count. Zwróć uwagę, że zazwyczaj najpierw patrzysz na obiekty z niskimi, niezerowymi różnicami w liczeniu, aby śledzić jedno źródło przecieku. Możesz drążyć listę obiektów i zobaczyć, co zachowuje je w pamięci, rozwijając drzewo w widoku Wykres odniesienia.

+0

Więcej świeższe linków: http://blogs.microsoft.co.il/blogs/sasha/archive/2012/10/15/diagnosing-memory-leaks-in -managed-windows-store-apps.aspx –

+0

Wygląda na to, że pliki etl (Event Trace Log), które możesz wytworzyć za pomocą komendy wpr (Windows Performance Recorder) i odczytać za pomocą wpa (Windows Performance Analyzer), mogą być pomocne w poszukiwaniu nieszczelności , chociaż jeszcze z nim nie grałem. Sprawdź te linki, które mogą zawierać przydatne informacje 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 –

+1

Użytkownicy powinni pamiętać, że opcja "Pamięć zarządzana przez debugowanie" jest dostępna tylko w Visual Studio 2013 Ultimate, a zrzut jest tworzony w procesie .NET 4.5. Więcej informacji: http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/20/using-visual-studio-2013-to-diagnose-net-memory-issues-in-production.aspx –

1
+0

Dzięki! Muszę to wypróbować! –

+1

Wysłuchali mnie na Twitterze, mówiąc, że obsługuje tylko śledzenie zarządzanej strony, ale to powinno wystarczyć dla wielu osób. –

+0

Pytanie zostało oznaczone .net, więc zapomniałem wspomnieć, że nie będzie działać (w najnowszej wersji) z WinJS. W pewnym momencie nie zdziwiłbym się. – kodefuguru

Powiązane problemy