Введение
Поисковик проблем с памятью в программном обеспечении
Отладчик памяти — это инструмент для поиска проблем с памятью в программном обеспечении, таких как утечки памяти и переполнение буфера. Эти проблемы возникают из-за ошибок, связанных с выделением и освобождением динамической памяти. Программы, написанные на языках со сборкой мусора, например, управляемом коде, также могут нуждаться в отладчиках памяти, например, для обнаружения утечек памяти, вызванных "живыми" ссылками в коллекциях.
Обзор
Отладчики памяти работают, отслеживая доступ к памяти, выделение и освобождение памяти. Многие отладчики памяти требуют перекомпиляции приложений со специальными библиотеками динамического выделения памяти, API которых в основном совместимы с обычными библиотеками динамического выделения памяти, либо используют динамическую компоновку. Electric Fence – один из таких отладчиков, который отлаживает выделение памяти с помощью malloc. Некоторые отладчики памяти (например, Valgrind) работают, запуская исполняемый файл в среде, подобной виртуальной машине, отслеживая доступ к памяти, выделение и освобождение, что позволяет избежать перекомпиляции со специальными библиотеками выделения памяти. Поиск проблем с памятью, таких как утечки, может быть крайне трудоемким, поскольку они могут проявляться только при определенных условиях. Использование инструмента для обнаружения некорректного использования памяти значительно ускоряет и упрощает этот процесс. Поскольку аномально высокое потребление памяти может способствовать старению программного обеспечения, отладчики памяти помогают программистам избегать программных ошибок, приводящих к исчерпанию памяти компьютерной системы, тем самым обеспечивая высокую надежность программного обеспечения даже при длительной работе.
Сравнение со статическим анализатором
Некоторые инструменты статического анализа также могут помочь в обнаружении ошибок памяти. Отладчики памяти работают в процессе выполнения приложения, а статический анализ кода выполняется путем анализа кода без его запуска. Эти различные подходы обычно выявляют разные типы проблем, и их совместное использование дает наилучший результат.
Список инструментов отладки памяти
Это список инструментов, полезных для отладки памяти. Профилировщик может использоваться совместно с отладчиком памяти. NameOSLicenseLanguagesTechnique AddressSanitizer Linux, Mac OS Свободное/открытое ПО (LLVM) C, C++. Инструментация времени компиляции (доступна в Clang и GCC) и специализированная библиотека Allinea DDT Linux, Blue Gene коммерческий C, C++ и F90. Также для параллельных программ на суперкомпьютерах. Время выполнения – через динамическую компоновку AQtime Windows (Visual Studio, Embarcadero IDEs) коммерческий NET, C++, Java, Silverlight, JScript, VBScript Время выполнения Bcheck Solaris Проверка границ BoundsChecker Windows (Visual Studio) коммерческий C++ Время выполнения – перехваты или время компиляции Daikon Unix, Windows, Mac OS X Свободное ПО Java, C/C++, Perl и Eiffel Время выполнения – обнаружение динамических инвариантов Debug new (общий метод) (общий метод) C++ Время компиляции – переопределение Deleaker Windows (автономный режим, и плагины для Visual Studio, RAD Studio, Qt Creator, CLion) коммерческий C++, Net, Delphi Время выполнения – перехваты dmalloc Свободное ПО C Время компиляции – переопределение Android, Linux, Windows Свободное ПО (LGPL и BSD) Время выполнения – перехваты Electric Fence Unix C, C++ Время компиляции – переопределение FASTMM4 Windows Delphi Время компиляции – переопределение IBM Rational Purify Unix, Windows коммерческий C++, Java, NET Время выполнения Insure++ Windows (плагин Visual Studio), Unix коммерческий C, C++ Инструментация исходного кода Intel Inspector Windows (Visual Studio), Linux коммерческий C, C++, Fortran Время выполнения libcwd Linux (gcc) Свободное ПО C, C++ Время компиляции – переопределение libumem Solaris Входит в состав Solaris Время компоновки – переопределение Memwatch (программная библиотека) Свободное ПО C Время компиляции – переопределение mtrace GNU C library Встроенный, выводит обращения MTuner C, C++ Время выполнения – перехваты, Время компоновки – переопределение (MSVC, Clang и GCC), Обнаружение утечек Oracle Solaris Studio (ранее Sun Studio Runtime Checking) Linux, Solaris Проприетарное бесплатное ПО C, C++, Fortran OLIVER (APT international) MVS, MVS/EXA, DOS/VSE Программное обеспечение IBM Assembler Время выполнения – перехваты, Гипервизор Type 2 TotalView Unix, Mac OS X коммерческий C, C++, Fortran Время выполнения Linux, Mac OS, Android Время выполнения – перехваты WinDbg Windows бесплатное ПО C, C++, NET, Python Время выполнения