Как стать автором
Обновить

Комментарии 13

А где два самых популярных - Valgring и Visual Leak Detector?

Указанные Вами инструменты находят утечки, если соответствующий фрагмент кода был выполнен, т.е. зависят от входных данных. В статье представлены более универсальные методы, не зависящих от входных данных.

Только в конце статье вывод, что они очень плохо находят утечки.

А valgrind, если его правильно использовать, находит. Да, надо подготовить входные данные, чтобы активировать все ключевые пути исполнения (точно так же как и при написании unit test надо правильно подобрать тестовые данные, кстати, часто видел, что как раз и запускают unit testы под valgrind убивая двух зайцев, ведь как раз в тестах задача автивации всех путей исполнения уже решена), но при соблюдении этих условий он хотя бы работает.

Нахождение всех утечек одной кнопкой без тюнинга входных данных - утопия. Так как эта задача близка по духу к NP-полной "задаче остановки".

  1. Если существующие методы не очень, не значит нельзя делать лучше)

  2. Да, согласен можно унит тесты так прогонять, мы тоже так делаем. Но если даже у вас 100% code coverage по тестам, это не значит вы покрыли все пути в программе.

А VLD еще жив? Помню, пытался установить его на 19-ую студию, нашел какую-то сборку, установил, так он даже простейшие утечки не находит. Deleaker получше будет, хоть и платный.

Про нынешнюю Студию не скажу - я пользовался им с 15-м студийным компилятором, в качестве IDE используя Qt Creator. Писал свою небольшую оснастку для удобного отображения утечек в консоли. Помню, были хитрости, как его завести, какие-то дефайны требовалось включить в код.

С тех пор все крупные работы уехали под Линукс, так что новые ревизии не щупал - но в тех проектах VLD был прямо маст-хэв и особо альтернатив не имел.

В статье описаны методы статического анализа нахождения утечек памяти, а Valgring и Visual Leak Detector делают динамический анализ. Представленные методы статического анализа анализируют все пути в программе, а динамический анализ - в практике только некоторые пути смотрит (подробнее - https://pvs-studio.ru/ru/blog/posts/0117/). Valgring и Visual Leak Detector тоже полезны если писать много разных тестов. А работа статических анализаторов не требует дополнительных действий.

В статье не сказано, что рассмотрены только способы статического анализа. Было бы написано в начале - вопросов бы не было.

К статическому анализу есть отдельные вопросы - а как, к примеру, это работает с внешними либами?

В статье описаны методы статического анализа нахождения утечек памяти, а Valgring и Visual Leak Detector делают динамический анализ. Представленные методы статического анализа анализируют все пути в программе, а динамический анализ - в практике только некоторые пути смотрит (подробнее - https://pvs-studio.ru/ru/blog/posts/0117/). Valgring и Visual Leak Detector тоже полезны если писать много разных тестов. А работа статических анализаторов не требует дополнительных действий.

И вишенка на торте: покупайте наших слонов! Точнее: приходите к нам, у нас есть приз.

Самое неприятное с утечками памяти это когда она на самом деле не течёт и её нельзя пометить как нетекущую или хотя бы статичный лайфтайм обозначить. Особенно заметно при использовании всяких плафторменноспецифичных штук - всякие winapi на винде или вызовы системных api на маках.

Почему нет упоминания о "датчиках срабатывания ошибок"? Например о том же AddressSanitizer?

Много лет юзаю C++ Memory Validator. В реалтайме(да, он успевает!!!!) показывает все аллокации, текущее состояние по каждому типу, по размерам и т.п. Ну и утечки по итогу тоже. Прям рекомендую.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории