WikiDer > Отладчик памяти

Memory debugger

А отладчик памяти это отладчик для поиска проблем с программной памятью, таких как утечки памяти и переполнение буфера. Это связано с ошибки связанных с распределением и освобождением динамическая память. Программы, написанные на языках, в которых вывоз мусора, Такие как управляемый код, также могут потребоваться отладчики памяти, например на предмет утечек памяти из-за "живых" ссылок в коллекциях.

Обзор

Отладчики памяти работают, отслеживая доступ к памяти, выделение и освобождение памяти. Многие отладчики памяти требуют перекомпиляции приложений со специальными библиотеками распределения динамической памяти, API-интерфейсы которых в основном совместимы с обычными библиотеками распределения динамической памяти, или же используют динамическое связывание. Забор под напряжением такой отладчик, который отлаживает выделение памяти с помощью маллок. Некоторые отладчики памяти (например, Валгринд) работают, выполняя исполняемый файл в среде, подобной виртуальной машине, отслеживая доступ к памяти, выделение и освобождение, так что перекомпиляция с использованием специальных библиотек распределения памяти не требуется.

Выявление проблем с памятью, таких как утечки, может занять очень много времени, поскольку они могут проявляться только при определенных условиях. Использование инструмента для обнаружения неправильного использования памяти делает процесс намного быстрее и проще.[1]

Поскольку аномально высокое использование памяти может быть фактором, способствующим старение программного обеспечения, отладчики памяти могут помочь программистам избежать программные аномалии что приведет к исчерпанию памяти компьютерной системы, что обеспечит высокую надежность программного обеспечения даже на время выполнения.

Сравнение со статическим анализатором

Немного инструменты статического анализа также может помочь найти ошибки памяти. Отладчики памяти работают как часть приложения, пока оно Бег пока статический анализ кода выполняется путем анализа кода без его выполнения. Эти разные методы обычно позволяют найти разные примеры проблем, и их совместное использование дает наилучший результат.[2]

Список инструментов отладки памяти

Это список инструменты полезно для отладки памяти. А профайлер может использоваться вместе с отладчиком памяти.

ИмяОперационные системыЛицензияЯзыкиТехника
AddressSanitizerLinux, Mac OSСвободный / открытый исходный код (LLVM)C, C ++.Инструментарий времени компиляции (доступен в Лязг и GCC) и специализированная библиотека
Аллинея ДДТLinux, Blue GeneСобственная рекламаC, C ++ и F90. Также для параллельных программ на суперкомпьютерахВремя выполнения - через динамическое связывание
AQtimeWindows (Visual Studio, IDE Embarcadero)Собственная реклама.NET, C ++, Java, Silverlight, JScript, VBScript[3]Время выполнения
BcheckСолярис
BoundsCheckerWindows (Visual Studio)Собственная рекламаC ++Перехват во время выполнения или во время компиляции
ДайконUnix, Windows, Mac OS X[4]Бесплатно / с открытым исходным кодом[5]Java, C / C ++, Perl и Eiffel[4]Обнаружение динамических инвариантов во время выполнения
Debug_new(общая техника)(общая техника)C ++Переопределение во время компиляции
DeleakerWindows (автономная версия и плагины для Visual Studio, RAD Studio, Qt Creator, CLion)Собственная рекламаC ++, .Net, DelphiПерехваты во время выполнения
дмаллокЛюбойБесплатно / с открытым исходным кодомCПереопределение во время компиляции
DynamoRIO § Доктор ПамятьAndroid, Linux, WindowsСвободный / открытый исходный код (LGPL и BSD)ЛюбойПерехваты во время выполнения
Забор под напряжениемUnixСвободный / открытый исходный код (GPL)C, C ++Переопределение во время компиляции
FASTMM4WindowsСвободный / открытый исходный код (GPL)DelphiПереопределение во время компиляции
IBM Rational PurifyUnix, WindowsСобственная рекламаC ++, Java, .NETВремя выполнения
Страхование ++Windows (плагин Visual Studio), UnixСобственная рекламаC, C ++инструментарий исходного кода
Инспектор IntelWindows (Visual Studio)Собственная рекламаC, C ++
libcwdLinux (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
TotalViewUnix, Mac OS XСобственная рекламаC, C ++, ФортранВремя выполнения
Valgrind § MemcheckLinux, Mac OS, AndroidСвободный / открытый исходный код (GPL)ЛюбойПерехваты во время выполнения
WinDbgWindowsПроприетарное бесплатное ПОC, C ++, .NET, PythonВремя выполнения

Смотрите также

Рекомендации

  • Майкл С. Даконта: Указатели C ++ и управление динамической памятью, Джон Уайли и сыновья, ISBN 0-471-04998-0
  • Эндрю Кениг: C Ловушки и подводные камни, Эддисон-Уэсли, ISBN 0-201-17928-8

внешняя ссылка