Jakiej strategii używasz do śledzenia problemu związanego z pamięcią? Jakich narzędzi używasz (zarówno open source, jak i zastrzeżonych) do identyfikowania wycieków pamięci, uszkodzenia pamięci itp.? Jak śledziłbyś wycieki pamięci, gdyby tylko system gdb / dbx był dostępny w systemie?
Dla mnie naprawianie wycieków pamięci tylko za pomocą debuggera jest bardzo trudne.
debugging
memory-leaks
Hemant
źródło
źródło
Odpowiedzi:
Jeśli możesz zmienić kod źródłowy, Dmalloc jest świetny; wyświetli listę, które wskaźniki nie zostały wprowadzone i (w przypadku kodu zbudowanego z symboli debugowania) dokładnie, w której linii zostały przydzielone.
Jeśli nie możesz, Valgrind jest właściwie standardem dla tego rodzaju rzeczy. Zasadniczo uważam, że Valgrind jest nieco trudniejszy w użyciu, ale ma znacznie więcej funkcji i nie wymaga dodawania wywołań dmalloc do kodu
źródło
valgrind jest niezwykle pomocny.
źródło
Masyw (od valgrind) to jeden z najlepszych sposobów na wykrycie wycieków pamięci. Powtórz podejrzany kod (lub uruchom program wystarczająco długo) i zrzuć wynik za pomocą ms_print. Zwykle stos wywołań zawiera wystarczającą ilość informacji, aby go naprawić.
Za pomocą GDB możesz próbować dołączyć do działającego programu i wywołać funkcje takie jak
malloc_stats()
Jeśli twój program jest napisany w innym języku, może to być trudniejsze. Ostatnio część GDB zyskała skryptowalność, a ludzie rozpoczęli ciekawe projekty, takie jak gdb-heap , które mogą analizować pamięć Python z zrzutu pamięci. Podobne skrypty analizy pamięci mogą być możliwe dla obiektów C ++.
Przeczytaj także /programming/2564752/examining-cc-heap-memory-statistics-in-gdb
źródło
W przypadku systemu Solaris istnieje kilka narzędzi wymienionych w odpowiedziach na to pytanie StackOverflow (obejmują one sprawdzanie szczelności z innymi formami złego dostępu do pamięci).
źródło
Od jakiegoś czasu zajmuję się Objective-C i istnieje analizator, który zajmuje się zarządzaniem pamięcią na poziomie C i tym podobne. Clang Static Analyzer jest tak dobry, że Apple zdecydowało się na dołączenie go do swojego IDE xCode. Nie jestem pewien, czy to jest dobre na twoje pytanie, ale jeśli robisz C, to warto spróbować.
źródło