G ++ Мультиплатформенный инструмент для обнаружения утечек памяти - PullRequest
11 голосов
/ 27 июня 2009

Кто-нибудь знает, где я могу найти инструмент обнаружения утечек памяти для C ++, который можно запустить либо из командной строки, либо как подключаемый модуль Eclipse в Windows и Linux. Я хотел бы, чтобы это было легко использовать. Предпочтительно тот, который не перезаписывает new (), delete (), malloc () или free (). Что-то вроде GDB, если он будет в командной строке, но я не помню, чтобы он использовался для обнаружения утечек памяти. Если есть среда модульного тестирования, которая делает это автоматически, это было бы здорово.

Этот вопрос похож на другие вопросы (например, Обнаружение утечки памяти под Windows для GNU C / C ++ ), однако я чувствую, что это не так, потому что они запрашивают конкретные решения для Windows или имеют решения, которые я бы предпочел избежать. Я чувствую, что ищу что-то более конкретное здесь. Предложения не должны удовлетворять всем требованиям, но было бы неплохо как можно больше.

Спасибо.

РЕДАКТИРОВАТЬ: С тех пор, как это произошло, под «перезаписью» я подразумеваю все, что требует от меня включения библиотеки #include или иным образом изменяет компиляцию моего кода в C ++, если это происходит во время выполнения, так что выполнение кода в другая среда не повлияет на то, что было бы здорово. Кроме того, к сожалению, у меня нет Mac, поэтому любые предложения на этот счет бесполезны, но спасибо за попытку. Мой рабочий стол работает под управлением Windows (у меня установлен Linux, но мои двойные мониторы не работают с ним), и я бы предпочел не запускать Linux на виртуальной машине, хотя это, безусловно, вариант. Мой ноутбук работает под управлением Linux, поэтому я могу использовать этот инструмент там, хотя я определенно предпочел бы придерживаться своего рабочего стола, поскольку пространство на экране отлично подходит для хранения всей проектной документации и требований без необходимости слишком много перемещаться по рабочему столу. .

ПРИМЕЧАНИЕ. Хотя я могу попробовать ответы, я не буду отмечать их как принятые, пока не попробую предложение и оно не будет удовлетворительным.

EDIT2: меня не беспокоит межплатформенная совместимость моего кода, это приложение командной строки, использующее только библиотеки C ++.

Ответы [ 6 ]

10 голосов
/ 27 июня 2009

Valgrind ваш лучший друг . У Valgrind есть плагин для затмения. «К сожалению», Valgrind не работает в Windows, но работает в Mac OSX, * BSD и Linux, так что я считаю эту «мультиплатформенную». :)

Valgrind «перезаписывает» new / delete / malloc / free, но не во время компиляции (поэтому вам не нужно перекомпилировать, если вы это имеете в виду). Он интерпретирует двоичный файл, поэтому производительность немного снижается во время тестирования.

1 голос
/ 30 мая 2010

DUMA - это кросс-платформенная библиотека для обнаружения утечек, которую я использую для многих своих проектов. Это хорошо, потому что вам не нужно #include какой-либо специфичный для DUMA заголовок, а просто сделать ссылку в библиотеке перед тем, как ссылаться в libc вашей системы, который содержит подпрограммы выделения памяти, и после ссылки в libstdc ++.

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

Одно замечание: намного проще, если вы создаете статический архив (созданный по умолчанию в Windows), потому что он помогает уменьшить «ложные срабатывания», которые на самом деле вызваны утечкой времени выполнения.

1 голос
/ 27 июня 2009

Хотя вы упомянули, что это не является предпочтительным, Boehm Garbage Collector может использоваться для обнаружения утечек памяти. Проще говоря, если сборщик мусора действительно когда-либо работает, то обычно у вас есть утечка памяти. Это используется Mozilla для обнаружения утечек памяти в Firefox.

1 голос
/ 27 июня 2009

для 32-битных приложений, valgrind + wine может быть рабочим решением и для приложений Windows. Если ваше приложение может быть запущено под Wine без каких-либо изменений, то, по моему (довольно ограниченному) опыту, я могу запустить его под valgrind + wine. Поскольку ваше приложение работает под Linux, я думаю, что ваше приложение, вероятно, будет работать под Wine (избегая специфичного для Windows кода, который еще не поддерживается в wine).

0 голосов
/ 20 февраля 2018

В более новых версиях gcc есть то, что называется утечка . Вам просто нужно добавить -fsanitize=leak для компиляции команды. Затем вы запускаете свою программу нормально и в конце, если произошла утечка, вы получите сводку (конечно, в терминале).

0 голосов
/ 27 июня 2009

В MacOS X есть инструмент leaks (я не знаю, существует ли он где-либо еще), и я использовал в Linux инструмент под названием memprof. Есть также valgrind, который работает на linux и невероятно хорош, но имеет существенный удар по производительности, и якобы на macos, но я не пробовал.

Однако я ничего не знаю о таких инструментах в Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...