Как узнать несвободную память в функции? - PullRequest
0 голосов
/ 03 июня 2019

Я знаю, что можно использовать Valgrind для обнаружения утечек памяти при выполнении всей программы. Но теперь я хочу отследить неосвобожденную память во время выполнения функции. Функция является лишь частью программы, но она довольно сложна и содержит вызовы других функций. Программа Valgrind clean.

Есть ли способ сделать это? Спасибо.

1 Ответ

3 голосов
/ 03 июня 2019

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

Если вы хотите обнаружить утечки только в функции, вы просто пишете для нее модульный тест и запускаете его под valgrind. Это облегчает охват некоторых случаев, которые могут быть затруднены при использовании внешнего интерфейса программы.

Конечно, valgrind - это динамический анализ, который может проверять только те утечки, которые действительно происходят во время тестового прогона, поэтому вам нужно позаботиться о том, чтобы получить хорошее покрытие. Это также подавляет утечки, когда еще есть нечто, похожее на действительный указатель на память. Это связано с тем, что многие библиотеки не беспокоятся об освобождении памяти при завершении работы (и это правильно; в любом случае система должна очищать ее), но иногда это может привести к ложному отрицанию. Статический анализ был бы лучше в этом отношении, но я не знаю ни одного хорошего для этой цели - обнаружить некорректное управление памятью статически очень сложно (даже Rust может надежно предотвратить использование после освобождения, но только большинство утечек, не все ).

...