Список "холодных" областей памяти
Я пытаюсь найти очень уклончивую ошибку в серверном программном обеспечении, которая выглядит как утечка памяти, но memcheck совсем не помог. Я предполагаю, что память, которая была создана и никогда не удалена, действительно не просочилась, поэтому есть ссылка на нее, но теперь она бесполезна для программы и должна быть удалена. Существует ли инструмент, который может подсчитывать обращения, а не ссылки в памяти, и, таким образом, давать оценку эффективного использования объектов в куче?
2 ответа
В итоге я реализовал свой собственный инструмент. Мой подход немного отличался от того, что я намеревался: я написал библиотеку перехвата malloc. Он перехватывает malloc, realloc и free и поддерживает список живых блоков памяти malloc'd. Всякий раз, когда вы отправляете SIGUSR1 в свое приложение, он записывает свою информацию в файл и оценивает ее как выражение Mathematica. В записной книжке Mathematica наконец-то появилось несколько очень полезных графиков: лучшие оценки по стеку вызовов и полный обзор вызовов malloc. С помощью этих инструментов мне просто пришлось навести мышь на самую жирную и самую отдаленную от центральной зеленой точки второго графика, и, вуаля, у меня есть адрес, который создает множество не просочившейся, но бесполезной памяти.
PS Циклические вызовы, которые вы можете видеть на втором графике, определенно являются ошибкой в backtrace libc ().
Вероятно, этот инструмент (Visual Leak Detector) поможет вам. Это бесплатно.