Debuger pamięci — Memory debugger

Debugera pamięci jest debugera znalezienia problemy z pamięcią oprogramowanie, takie jak szczelność pamięci i przepełnienia bufora . Wynikają one z błędów związanych z alokacją i cofaniem alokacji pamięci dynamicznej . Programy napisane w językach, które mają garbage collection , takie jak Managed Code , mogą również wymagać debuggerów pamięci, np. w przypadku wycieków pamięci z powodu „żywych” odwołań w kolekcjach.

Przegląd

Debugery pamięci działają przez monitorowanie dostępu do pamięci, alokacji i cofania alokacji pamięci. Wiele debugerów pamięci wymaga ponownej kompilacji aplikacji za pomocą specjalnych bibliotek dynamicznej alokacji pamięci, których interfejsy API są w większości kompatybilne z konwencjonalnymi bibliotekami dynamicznej alokacji pamięci, lub też używają dynamicznego łączenia. Electric Fence jest takim debuggerem, który debuguje alokację pamięci za pomocą malloc . Niektóre debugery pamięci (np. Valgrind ) działają, uruchamiając plik wykonywalny w środowisku przypominającym maszynę wirtualną, monitorując dostęp do pamięci, alokację i cofanie alokacji, dzięki czemu nie jest wymagana ponowna kompilacja ze specjalnymi bibliotekami alokacji pamięci.

Znajdowanie problemów z pamięcią, takich jak wycieki, może być niezwykle czasochłonne, ponieważ mogą się one nie objawiać, chyba że w określonych warunkach. Korzystanie z narzędzia do wykrywania nadużyć pamięci znacznie przyspiesza i ułatwia ten proces.

Ponieważ nienormalnie wysokie wykorzystanie pamięci może być czynnikiem przyczyniającym się do starzenia oprogramowania , debugery pamięci mogą pomóc programistom w uniknięciu anomalii programowych , które wyczerpią pamięć systemu komputerowego, zapewniając w ten sposób wysoką niezawodność oprogramowania nawet w przypadku długich czasów działania .

Porównanie z analizatorem statycznym

Niektóre narzędzia do analizy statycznej mogą również pomóc w znalezieniu błędów pamięci. Debugery pamięci działają jako część aplikacji, gdy jest ona uruchomiona, podczas gdy statyczna analiza kodu jest wykonywana przez analizowanie kodu bez jego wykonywania. Te różne techniki zazwyczaj znajdują różne przypadki problemów, a użycie ich razem daje najlepsze wyniki.

Lista narzędzi do debugowania pamięci

To jest lista narzędzi przydatnych do debugowania pamięci. Profilowania mogą być stosowane w połączeniu z debugera pamięci.

Nazwa OS Licencja Języki Technika
AdresSanitizer Linux, Mac OS Bezpłatne/open source (LLVM) C, C++. Instrumentacja czasu kompilacji (dostępna w Clang i GCC ) oraz specjalistyczna biblioteka
Allinea DDT Linux, niebieski gen Zastrzeżona reklama C, C++ i F90. Również dla programów równoległych na superkomputerach Runtime - poprzez dynamiczne łączenie
AQtime Windows (Visual Studio, IDE Embarcadero) Zastrzeżona reklama .NET, C++, Java, Silverlight, JScript, VBScript Czas pracy
Bcheck Solaris
Sprawdzanie granic Okna (program Visual Studio) Zastrzeżona reklama C++ Przechwytywanie w czasie wykonywania lub czas kompilacji
Daikon Unix, Windows, Mac OS X Bezpłatne/open source Java, C/C++, Perl i Eiffel Dynamiczne wykrywanie niezmienności w czasie wykonywania
Debugowanie_nowe (technika ogólna) (technika ogólna) C++ Nadpisanie czasu kompilacji
Delaker Windows (samodzielny i wtyczki do Visual Studio, RAD Studio, Qt Creator, CLion) Zastrzeżona reklama C++, .Net, Delphi Przechwytywanie w czasie wykonywania
dmalloc Każdy Bezpłatne/open source C Nadpisanie czasu kompilacji
DynamoRIO § Dr Pamięć Android, Linux, Windows Wolne/open source (LGPL i BSD) Każdy Przechwytywanie w czasie wykonywania
Ogrodzenie pod napięciem Uniksa Wolne/open source (GPL) C, C++ Nadpisanie czasu kompilacji
FASTMM4 Okna Wolne/open source (GPL) Delfy Nadpisanie czasu kompilacji
IBM Rational Purify Uniks, Windows Zastrzeżona reklama C++, Java, .NET Czas pracy
Ubezpiecz ++ Windows (wtyczka Visual Studio), Unix Zastrzeżona reklama C, C++ oprzyrządowanie kodu źródłowego
Inspektor Intel Windows (program Visual Studio), Linux Zastrzeżona reklama C, C++, Fortran Czas pracy
libcwd Linux (gcc) Bezpłatne/open source C, C++ Nadpisanie czasu kompilacji
Libumem Solaris W zestawie z Solaris Nadpisanie czasu łącza
Memwatch Dowolny (biblioteka programistyczna) Bezpłatne/open source C Nadpisanie czasu kompilacji
ślad Różny Bezpłatne/open source (LGPL) Biblioteka GNU C Wbudowane, dostępy do wyjść
MTuner Różny Darmowy C, C++ Przechwytywanie w czasie wykonywania, nadpisywanie czasu łącza (MSVC, Clang i GCC), wykrywanie wycieków
Oracle Solaris Studio (dawniej Sun Studio Runtime Checking) Linux, Solaris Zastrzeżone oprogramowanie bezpłatne C, C++, Fortran
OLIVER (APT międzynarodowy) MVS, MVS/EXA, DOS/VSE Zastrzeżone oprogramowanie Asembler IBM Przechwytywanie w czasie wykonywania, hiperwizor — typ 2
Widok całkowity Unix, Mac OS X Zastrzeżona reklama C, C++, Fortran Czas pracy
Valgrind § Memcheck Linux, Mac OS, Android Wolne/open source (GPL) Każdy Przechwytywanie w czasie wykonywania
WinDbg Okna Zastrzeżone oprogramowanie bezpłatne C, C++, .NET, Python Czas pracy

Zobacz też

Bibliografia

  • Michael C. Daconta: Wskaźniki C++ i dynamiczne zarządzanie pamięcią , John Wiley & Sons, ISBN  0-471-04998-0
  • Andrew Koenig : Pułapki C i pułapki , Addison-Wesley, ISBN  0-201-17928-8

Zewnętrzne linki