Я отслеживаю очень жесткую ситуацию с утечкой памяти (или, скорее всего, с оставленной памятью).Я делаю следующее:
1) запускаю мое приложение
2) добираюсь до точки, где приложение покажет утечку
3) запускает инструменты, используя выбор «распределения»
4)присоединитесь к моему процессу и начните запись
5) сделайте начальный снимок кучи
6) сделайте начальный снимок с помощью VM tracker
7) воспроизведите шаги, которые приводят к увеличению памяти
8) сделайте еще один снимок кучи
9) сделать еще один снимок с помощью VM tracker
Если я сделаю эти шаги, я увижу результаты, которые на самом деле не имеют смысла.Я надеюсь, что мне не хватает информации о том, как работают эти инструменты.Например, я знаю, что инструмент «утечки» не отслеживает ВСЕ виды распределения памяти (например, углеродные приложения).Мое приложение - это огромное унаследованное приложение, которое может иметь странный код размещения в какой-то устаревшей подсистеме, с которой я не знаком.Тем не менее, вот что я вижу:
- в первоначальном снимке трекера VM, когда я смотрю на сводку, тип MALLOC_SMALL довольно мал и составляет примерно 72 МБ (виртуальный размер)
- во втором снимке использование MALLOC_SMALL выросло до 224 МБ (опять же виртуальный размер)
- во втором снимке кучи, оно говорит мне, что размер кучи составляет 45 МБ
Так как MALLOC_SMALL может вырасти из72MB до 224MB, но объем памяти только 45MB?В инструменте Allocations отсутствует то, что записывает VMTracker?
Далее подтверждая, что я что-то упустил в инструменте Allocations ... если я посмотрю на НОВЫЕ регионы, перечисленные в MALLOC_SMALL (те, которые не были в первом снимке, но были во втором), эти адреса должнысоответствуют страницам, которые были выделены и составляют разницу в 72 МБ-> 224 МБ, верно?Затем я запомнил диапазон адресов для этого региона (например, 0x79000000-0x7b000000) и вернулся к инструменту Allocations и отсортировал список «All Objects» по адресу.Затем я ищу адреса в этом диапазоне.Тем не менее, я вижу только 4 выделения, которые составляют только 4 КБ ?!Где остальные 32 МБ, которые VM tracker сообщил в этом регионе?
Любая помощь будет принята с благодарностью .... Я надеюсь, что это что-то базовое о том, как работают эти инструменты, что я просто не понимаю.