Детекторы утечки памяти для C?

С какими детекторами утечки памяти у людей был хороший опыт?

Вот краткое изложение полученных ответов:

Валгринд - Инструментальная среда для построения инструментов динамического анализа.

Забор под напряжением - инструмент, который работает с GDB

Шина - облегченная статическая проверка с помощью аннотаций

Код свечения - это полный профилировщик производительности и памяти в реальном времени для программистов Windows и .NET, которые разрабатывают приложения на C++, C# или любой .NET Framework.

Также см. Этот сообщение stackoverflow.

См. Также: github.com/google/sanitizers

Mikko Rantalainen 08.07.2019 15:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
32
1
24 473
17
Перейти к ответу Данный вопрос помечен как решенный

Ответы 17

Валгринд под linux неплохо работает; У меня нет опыта работы с этим под Windows.

У меня минимальная любовь к детекторам утечки памяти. Обычно ложных срабатываний слишком много, чтобы они могли быть полезны. Я бы рекомендовал эти два как наименее навязчивые:

GlowCode

Куча отладки

lint (очень похожий инструмент с открытым исходным кодом под названием шина)

Тем более, что шина - это не столько про утечки.

0xC0000022L 23.05.2011 19:41
Ответ принят как подходящий

во-вторых, Valgrind ... и я добавлю забор под напряжением.

Электрический забор не предназначен для обнаружения утечек памяти.

fuenfundachtzig 04.08.2017 16:02

Больно, но если бы пришлось использовать один ...
Я бы порекомендовал пакет DevPartner BoundsChecker .. это то, что люди на моем рабочем месте используют для этой цели. Платные проприетарные .. не бесплатные.

Я сам использовал BoundsChecker. невероятно был полезен как при утечках памяти, так и при других утечках ресурсов.

Herms 11.11.2008 17:49

В университете, когда я делал большинство вещей под Unix Solaris, я использовал GDB.

Однако я бы выбрал Valgrind под Linux.

Я буду использовать valgrind в качестве внешнего инструмента для устранения утечек памяти. Но для большинства проблем, которые мне приходилось решать, я всегда использовал внутренние инструменты. Иногда внешние инструменты имеют слишком много накладных расходов или слишком сложны для настройки.

Зачем использовать уже написанный код, если можно написать свой собственный :)

Шучу, но иногда нужно что-то простое и быстрее самому написать. Обычно я просто заменяю вызовы malloc () и free () функциями, которые лучше работают. отслеживать, кто что выделяет. Кажется, что большинство моих проблем кто-то забыл освободить, и это помогает решить эту проблему.

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

Для отладки утечек памяти Win32 у меня был очень хороший опыт работы с простой старой кучей отладки CRT, которая поставляется в виде библиотеки с Visual C.

В отладочной сборке malloc (и др.) Переопределяется как _malloc_dbg (и др.), И есть другие вызовы для получения результатов, которые все не определены, если _DEBUG не установлен. Он устанавливает всевозможные пограничники в куче и позволяет отображать результаты в любое время.

У меня было несколько ложных срабатываний, когда я наблюдал за некоторыми подпрограммами времени, которые мешали распределению времени выполнения библиотеки, пока я не обнаружил _CRT_BLOCK.

Мне пришлось создать сначала DOS, затем консоль Win32 и службы, которые работали бы вечно. Насколько я знаю, утечек памяти нет, и, по крайней мере, в одном месте код работал в течение двух лет без присмотра, прежде чем монитор на ПК вышел из строя (хотя ПК был в порядке!).

Дедушкой этих инструментов является коммерческий инструмент Очистить с закрытым исходным кодом, который был продан IBM, а затем UNICOM.

Страхование ++ от Parasoft (инструментарий исходного кода) и valgrind (открытый исходный код) - два других реальных конкурента.

Интересный факт: оригинальный автор Purify, Рид Гастингс, основал NetFlix.

Если у вас есть деньги: IBM Rational Purify - чрезвычайно мощный в отрасли детектор утечек и повреждений памяти для C / C++. Существует для Windows, Solaris и Linux. Если вы работаете только с Linux и хотите дешевое решение, выбирайте Valgrind.

Что Purify делает, а Valgrind - нет? В прошлый раз, когда я пробовал Purify, было очень сложно настроить и извлечь что-нибудь из этого, к тому же вам пришлось скомпилировать с помощью их компилятора. Valgrind использует вашу обычную отладочную сборку.

florin 23.10.2008 03:42

Обратите внимание, что очистка была продана UNICOM Systems unicomsi.com/products/purifyplus

djsadinoff 07.10.2015 08:41

Брызговик для gcc! Фактически он компилирует проверки в исполняемый файл. Просто добавь

-fmudflap -lmudflap

к вашим флагам gcc.

Для будущих пользователей это уже не так. По ссылке флаги ничего не делают. Вместо этого используйте Address Sanitizer.

UndyingJellyfish 02.10.2017 16:12

В Windows я использовал Визуальный детектор утечки. Интегрируется с VC++, прост в использовании (просто включите заголовок и установите LIB, чтобы найти библиотеку), с открытым исходным кодом, бесплатно использовать FTW.

Также стоит использовать, если вы работаете в Linux, используя glibc, - это встроенный код отладочной кучи. Чтобы использовать его, установите связь с -lmcheck или определите (и экспортируйте) переменную среды MALLOC_CHECK_ со значением 1, 2 или 3. В руководстве по glibc содержится дополнительная информация.

Этот режим наиболее полезен для обнаружения двойного освобождения, и он часто находит записи за пределами выделенной области памяти при выполнении освобождения. Я не думаю, что это сообщает об утечке памяти.

Наш инструмент CheckPointer может сделать это для GNU C 3/4 и, диалектов MS языка C и GreenHills C. Он может обнаруживать проблемы с управлением памятью, которые Valgrind не может.

Если ваш код просто просочится, при выходе CheckPointer сообщит вам, где была выделена вся неиспользованная память.

У меня было довольно много совпадений с cppcheck, который выполняет только статический анализ. Он с открытым исходным кодом и имеет интерфейс командной строки (по-другому я его не использовал).

+1 для cppcheck - тот не использовал, так что гляну; важная рекомендация - статический анализ

Andrew 22.09.2012 09:04

Никто не упомянул MSan из clang, который довольно мощный. Однако официально он поддерживается только в Linux.

Этот вопрос может быть старый, но я все равно на него отвечу - может быть, мой ответ кому-то поможет найти утечки памяти.

Это мой собственный проект - я поставил его как открытый исходный код:

https://sourceforge.net/projects/diagnostic/

Поддерживаются 32- и 64-разрядные платформы Windows, поддерживаются стеки вызовов в собственном и смешанном режимах.

Сборка мусора .NET не поддерживается. (C++ cli's gcnew или новый C#)

Это высокопроизводительный инструмент, не требующий какой-либо интеграции (если вы действительно не хотите его интегрировать).

Полное руководство можно найти здесь:

http://diagnostic.sourceforge.net/index.html

Не бойтесь того, сколько на самом деле он обнаружит утечки в вашем процессе. Он ловит утечки памяти из всего процесса. Анализируйте только самые большие утечки, а не все.

Другие вопросы по теме