Debuger pamięci — Memory debugger
Wykonanie programu |
---|
Pojęcia ogólne |
Rodzaje kodu |
Strategie kompilacji |
Godne uwagi czasy pracy |
|
Wybitne kompilatory i łańcuchy narzędzi |
|
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ż
- Profilowanie (programowanie komputerowe)
- Lista narzędzi do analizy wydajności
- Debuger
- Wykrywanie błędów w czasie wykonywania
- Testowanie oprogramowania
- Inżynieria oprogramowania
- Programowanie komputerowe
- Zrzut rdzenia
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
- „ Polowanie na robaki pamięci ” Ivana Skytte Jørgensen
- „ Porównanie wolnych kontrolerów pamięci ” Jean-Philippe Martin