Вопрос

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

Вот краткое изложение ответов на данный момент:

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

Электрическая Изгородь - Инструмент, который работает с GDB

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

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

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

Это было полезно?

Решение

во-вторых, валгринд...и я добавлю электрическая изгородь.

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

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

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

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

-fmudflap -lmudflap

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

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

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

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

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

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

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

Светящийся код

Отладочная куча

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

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

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

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

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

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

Однако я бы пошел с валгринд под управлением Linux.

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

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

Мелочи:оригинальный автор Purify, Рид Хастингс, впоследствии основал NetFlix.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top