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

Инструмент обнаружения утечки памяти на платформе g++ Multi-platform

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

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

Спасибо.

EDIT: поскольку это вызвало "перезапись", я имею в виду все, что требует от меня # включения библиотеки или в противном случае изменения, как С++ компилирует мой код, если он делает это во время выполнения, так что запуск кода в другая среда не повлияет ни на что, что было бы здорово. К сожалению, у меня нет Mac, поэтому любые предложения для этого бесполезны, но спасибо за попытку. Мой рабочий стол работает под управлением Windows (у меня установлен Linux, но мои двойные мониторы не работают с ним), и я бы предпочел не запускать Linux в виртуальной машине, хотя это, безусловно, вариант. Мой ноутбук работает под управлением Linux, поэтому я могу использовать этот инструмент там, хотя я определенно предпочел бы придерживаться своего рабочего стола, так как пространство экрана отлично подходит для хранения всей проектной документации и требований, без необходимости слишком много перемещаться по рабочему столу.

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

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

4b9b3361

Ответ 1

Valgrind является вашим лучшим другом. Valgrind имеет плагин для eclipse. "К сожалению" Valgrind не работает в Windows, но работает на Mac OSX, BSD и Linux, поэтому я бы подумал, что это "многоплатформенная" .:)

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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