Комментарии 13
А где два самых популярных - Valgring и Visual Leak Detector?
Указанные Вами инструменты находят утечки, если соответствующий фрагмент кода был выполнен, т.е. зависят от входных данных. В статье представлены более универсальные методы, не зависящих от входных данных.
Только в конце статье вывод, что они очень плохо находят утечки.
А valgrind, если его правильно использовать, находит. Да, надо подготовить входные данные, чтобы активировать все ключевые пути исполнения (точно так же как и при написании unit test надо правильно подобрать тестовые данные, кстати, часто видел, что как раз и запускают unit testы под valgrind убивая двух зайцев, ведь как раз в тестах задача автивации всех путей исполнения уже решена), но при соблюдении этих условий он хотя бы работает.
Нахождение всех утечек одной кнопкой без тюнинга входных данных - утопия. Так как эта задача близка по духу к NP-полной "задаче остановки".
А 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. В реалтайме(да, он успевает!!!!) показывает все аллокации, текущее состояние по каждому типу, по размерам и т.п. Ну и утечки по итогу тоже. Прям рекомендую.
Современное состояние инструментов поиска утечек памяти