Подтвердить что ты не робот

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

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

Вот краткое изложение ответов:

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

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

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

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

Также см. этот qaru.site/info/49455/....

4b9b3361

Ответ 2

Valgrind под Linux довольно неплохо; У меня нет опыта работы с Windows.

Ответ 3

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

Ответ 4

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

-fmudflap -lmudflap

для ваших gcc-флагов.

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

Ответ 9

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

GlowCode

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

Ответ 10

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

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

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

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

Ответ 11

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

Ответ 12

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

Однако я бы пошел с valgrind под Linux.

Ответ 13

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

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

Общая информация: оригинальный автор Purify, Рид Хастингс, продолжил поиск NetFlix.

Ответ 14

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

Ответ 15

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

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

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

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

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

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

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

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

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

Ответ 16

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

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

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

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

Ответ 17

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

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