Отладчик памяти является отладчик для поиска проблем с программным обеспечением памяти , таких как утечки памяти и переполнения буфера . Это связано с ошибками, связанными с выделением и освобождением динамической памяти . Программы, написанные на языках со сборкой мусора , таких как управляемый код , также могут нуждаться в отладчиках памяти, например, для утечек памяти из-за «живых» ссылок в коллекциях.
Обзор
Отладчики памяти работают, отслеживая доступ к памяти, выделение и освобождение памяти. Многие отладчики памяти требуют, чтобы приложения были перекомпилированы со специальными библиотеками распределения динамической памяти, чьи API-интерфейсы в основном совместимы с обычными библиотеками распределения динамической памяти, или же используют динамическое связывание. Electric Fence - это такой отладчик, который отлаживает выделение памяти с помощью malloc . Некоторые отладчики памяти (например, Valgrind ) работают, выполняя исполняемый файл в среде, подобной виртуальной машине, отслеживая доступ к памяти, выделение и освобождение памяти, поэтому перекомпиляция с использованием специальных библиотек распределения памяти не требуется.
Выявление проблем с памятью, таких как утечки, может занять очень много времени, поскольку они могут проявляться только при определенных условиях. Использование инструмента для обнаружения неправильного использования памяти делает процесс намного быстрее и проще. [1]
Как аномально высокая загрузка памяти может быть фактором , способствующим в программном обеспечении старение , отладчики памяти могут помочь программистам избежать программных аномалий , которые исчерпывают компьютерную память системы, что обеспечивает высокую надежность программного обеспечения , даже в течение длительного времени работы .
Сравнение со статическим анализатором
Некоторые инструменты статического анализа также могут помочь найти ошибки памяти. Отладчики памяти работают как часть приложения во время его работы, в то время как статический анализ кода выполняется путем анализа кода без его выполнения. Эти разные методы обычно позволяют найти разные примеры проблем, и их совместное использование дает наилучший результат. [2]
Список инструментов отладки памяти
Это список инструментов, полезных для отладки памяти. Профилировщика может быть использован в сочетании с отладчиком памяти.
Имя | Операционные системы | Лицензия | Языки | Техника |
---|---|---|---|---|
AddressSanitizer | Linux, Mac OS | Свободный / открытый исходный код (LLVM) | C, C ++. | Инструментарий времени компиляции (доступен в Clang и GCC ) и специализированная библиотека |
Аллинея ДДТ | Linux, Blue Gene | Собственная реклама | C, C ++ и F90. Также для параллельных программ на суперкомпьютерах | Время выполнения - через динамическое связывание |
AQtime | Windows (Visual Studio, IDE Embarcadero) | Собственная реклама | .NET, C ++, Java, Silverlight, JScript, VBScript [3] | Время выполнения |
Bcheck | Солярис | |||
BoundsChecker | Windows (Visual Studio) | Собственная реклама | C ++ | Перехваты во время выполнения или во время компиляции |
Дайкон | Unix, Windows, Mac OS X [4] | Бесплатно / с открытым исходным кодом [5] | Java, C / C ++, Perl и Eiffel [4] | Обнаружение динамических инвариантов во время выполнения |
Debug_new | (общая техника) | (общая техника) | C ++ | Переопределение во время компиляции |
Deleaker | Windows (автономная версия и плагины для Visual Studio, RAD Studio, Qt Creator, CLion) | Собственная реклама | C ++, .Net, Delphi | Перехваты во время выполнения |
дмаллок | Любой | Бесплатно / с открытым исходным кодом | C | Переопределение во время компиляции |
DynamoRIO § Доктор Память | Android, Linux, Windows | Свободный / открытый исходный код (LGPL и BSD) | Любой | Перехваты во время выполнения |
Забор под напряжением | Unix | Свободный / открытый исходный код (GPL) | C, C ++ | Переопределение во время компиляции |
FASTMM4 | Окна | Свободный / открытый исходный код (GPL) | Delphi | Переопределение во время компиляции |
IBM Rational Purify | Unix, Windows | Собственная реклама | C ++, Java, .NET | Время выполнения |
Страхование ++ | Windows (плагин Visual Studio), Unix | Собственная реклама | C, C ++ | инструментарий исходного кода |
Инспектор Intel | Windows (Visual Studio), Linux | Собственная реклама | C, C ++, Фортран | Время выполнения |
libcwd | Linux (gcc) | Бесплатно / с открытым исходным кодом | C, C ++ | Переопределение во время компиляции |
libumem | Солярис | В комплекте с Solaris | Переопределение времени компоновки | |
Memwatch | Любой (библиотека программирования) | Бесплатно / с открытым исходным кодом | C | Переопределение во время компиляции |
mtrace | Разные | Свободный / открытый исходный код (LGPL) | Библиотека GNU C | Встроенный, выходы, доступы |
MTuner | Разные | Бесплатно | C, C ++ | Перехваты во время выполнения, переопределение времени соединения (MSVC, Clang и GCC), обнаружение утечек |
Oracle Solaris Studio (ранее Sun Studio Runtime Checking) | Linux, Solaris | Проприетарное бесплатное ПО | C, C ++, Фортран | |
ОЛИВЕР (APT международный) | MVS, MVS / EXA, DOS / VSE | Проприетарное программное обеспечение | Ассемблер IBM | Перехват во время выполнения, гипервизор - Тип 2 |
TotalView | Unix, Mac OS X | Собственная реклама | C, C ++, Фортран | Время выполнения |
Valgrind § Memcheck | Linux, Mac OS, Android | Свободный / открытый исходный код (GPL) | Любой | Перехваты во время выполнения |
WinDbg | Окна | Проприетарное бесплатное ПО | C, C ++, .NET, Python | Время выполнения |
Смотрите также
- Профилирование (компьютерное программирование)
- Список инструментов анализа производительности
- Отладчик
- Обнаружение ошибок во время выполнения
- Тестирование программного обеспечения
- Программная инженерия
- Компьютерное программирование
- Дамп ядра
Рекомендации
- Майкл С. Даконта: указатели C ++ и динамическое управление памятью , John Wiley & Sons, ISBN 0-471-04998-0
- Эндрю Кениг : C Ловушки и ловушки , Эддисон-Уэсли, ISBN 0-201-17928-8
- ^ «Обзор: 5 отладчиков памяти для программирования под Linux» . Проверено 24 августа 2017 года .
- ^ «Динамический анализ против статического» . Проверено 24 августа 2017 года .
- ^ «Архивная копия» . Архивировано из оригинала на 2013-09-19 . Проверено 14 января 2013 .CS1 maint: заархивированная копия как заголовок ( ссылка )
- ^ а б http://groups.csail.mit.edu/pag/daikon/download/doc/daikon.html
- ^ http://groups.csail.mit.edu/pag/daikon/download/doc/daikon.html#License
Внешние ссылки
- « Охота за ошибками памяти » Ивана Скайтта Йоргенсена
- « Сравнение средств проверки свободной памяти » Жан-Филиппа Мартена [ требуется полная ссылка ]