G ++ Многоплатформенный инструмент обнаружения утечки памяти

Вы должны знать C, чтобы иметь возможность называть себя программистом!

11
задан Community 23 May 2017 в 12:33
поделиться

5 ответов

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

1
ответ дан 3 December 2019 в 08:56
поделиться

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

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

10
ответ дан 3 December 2019 в 08:56
поделиться

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

1
ответ дан 3 December 2019 в 08:56
поделиться

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

Однако мне неизвестны такие инструменты в Windows.

0
ответ дан 3 December 2019 в 08:56
поделиться

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

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

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

1
ответ дан 3 December 2019 в 08:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: