Czy da się zajrzeć we wnętrze działającej aplikacji? Zdecydowanie nie jest to trywialne. Można jednak wykorzystać do tego dump pamięci (zrzut pamięci). W niektórych przypadkach umożliwia on diagnostykę stanu aplikacji lub całego systemu.
Zrzut pamięci zawiera zapis stanu pamięci roboczej programu. Mogą znajdować się tam różne przydatne informacje dotyczące rejestrów, stanu systemu itd. Przy użyciu tzw. pliku symboli (PDB) możliwe jest dokładniejsza analiza. Jest to jednak dość zaawansowane zadanie, czym nie będę się tu zajmować. Z punktu widzenia testera, najważniejsze jest dostarczenie możliwie najpełniejszej informacji na temat błędu, odkładając na razie analizę programistyczną na bok.
W jakich przypadkach przydatne może być wygenerowanie zrzutu?
- Gdy program zużywa dużą ilość zasobów (procesora, pamięci, sieci, urządzeń). Może zapętlił się? Czeka na jakiś wątek?
- Gdy jawnie wystąpił wyjątek i program zostanie zamknięty.
Jak wykonać dump pamięci?
Opcji jest kilka. Opiszę pokrótce niektóre z nich.
- Program NotMyFault – powoduje on celową awarię systemu, co za tym idzie, wywołanie tzw. blue screen of death (BSOD) i wykonanie pełnego dumpa całej pamięci systemu. Użycie tej opcji jest uzasadnione w przypadku diagnostyki programów zintegrowanych z systemem Windows, na przykład sterowników.
https://docs.microsoft.com/en-us/sysinternals/downloads/notmyfault - Program ProcessExplorer – ten sympatyczny, kolorowy program jest rozbudowaną wersją Task Managera (Menedżer Zadań) znanego z systemu Windows. Umożliwia bardziej szczegółowy podgląd procesów uruchomionych w systemie. Aby wykonać zrzut pamięci programu, wystarczy z drzewa wybrać interesujący nas proces i z menu kontekstowego wybrać pełny dump albo mini dump.
https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer
- Menedżer Zadań – podobnie jak w przypadku ProcessExplorer, wystarczy wybrać proces i z menu wybrać interesujący rodzaj zrzutu. Co ciekawe, nie zawsze udaje się wykonać dump z Task Managera, lepiej sprawuje sie ProcessExplorer, z którym jak dotąd nie miałam problemów.
Wyczerpujący materiał na temat konfiguracji samych zrzutów (m.in. rozróżnienia między „małym zrzutem” a „pełnym zrzutem”), ich wykonywania i używania można znaleźć na stronie Microsoftu: https://support.microsoft.com/en-us/help/969028/how-to-generate-a-kernel-or-a-complete-memory-dump-file-in-windows-server-2008-and-windows-server-2008-r2.