список «холодных» областей памяти - PullRequest
7 голосов
/ 26 декабря 2011

Я пытаюсь найти очень уклончивую ошибку в серверном программном обеспечении, которая выглядит как утечка памяти, но memcheck не помогала вообще. Я предполагаю, что память, которая была создана и никогда не удалена, действительно не просочилась, поэтому есть ссылка на нее, но теперь она бесполезна для программы и должна быть удалена. Существует ли инструмент, который может подсчитывать обращения, а не ссылки в памяти и, таким образом, давать оценку эффективного использования объектов в куче?

Ответы [ 2 ]

4 голосов
/ 28 декабря 2011

В итоге я реализовал свой собственный инструмент. Мой подход немного отличался от того, что я намеревался: я написал библиотеку перехвата malloc . Он перехватывает malloc, realloc и free и поддерживает список живых блоков памяти malloc'd. Всякий раз, когда вы отправляете SIGUSR1 в ваше приложение, он выводит свою информацию в файл и оценивает его как выражение Mathematica . В записной книжке Mathematica наконец-то появилось несколько очень полезных графиков: лучшие оценки по стеку вызовов и полный обзор вызовов malloc . С помощью этих инструментов мне просто пришлось навести мышь на самую жирную и самую отдаленную от центральной зеленой точки второго графика, и, вуаля, у меня есть адрес, который создает множество не утекшей, но бесполезной памяти.

P.S. Циклические вызовы, которые вы видите на втором графике, определенно являются ошибкой в ​​backtrace () libc.

0 голосов
/ 27 декабря 2011

Вероятно, этот инструмент (Visual Leak Detector) поможет вам. Это бесплатно.

http://vld.codeplex.com/

...