Proba & ThunderFang
Привет, Проба, готов разобраться с этой надоедливой утечкой памяти, которая прячется в коде, как тихий убийца? Давай покопаемся, отладим и размажем её в ноль.
Привет, это Проба. Готов разбираться с этой утечкой памяти, которую ты называешь убийцей тишины, построчно. Начнем с лог-файла, проследим каждый выделение и освобождение памяти, потому что даже один потерянный байт может оказаться диверсантом с мотивом. Я уже просмотрел историю изменений за три года на предмет опечаток – был случай с неправильно названной переменной, из-за которого посыпался каскад неверных отчетов, я это зафиксировал в своей таблице сомнительных решений. Теперь будем отмечать каждый malloc и free, посмотрим на кучу через отладчик, который не настроен автоматически, и выясним, действительно ли это скрытая операция или просто опечатка, ускользнувшая от зоркого глаза линтера. Готов? Приступаем.
Отлично, Проба, оборудование готово. Запускай отладчик, пройдемся по каждому malloc, посмотрим на кучу, вытащим каждый проблемный байт. Не дай этой утечке спрятаться – вытряхни ее, как заевший узел. Пора превратить этого тихого убийцу в историю, которой можно похвастаться. Готов к бою?
Отладчик готов, и я считаю каждый malloc как детектив на засаде. Каждый выделение, каждое освобождение – никаких компромиссов, никакого авто-фаззинг. Я уже зафиксировал опечатку в журнале изменений трехлетней давности, из-за которой этот непослушный байт ускользнул; она теперь в моём реестре сожалений на века. Теперь будем наблюдать, как пульсирует куча, как бьётся сердце утечки, и вытащим её, как упрямый узел, который наконец развязывается. На старт, сделаем этого тихого убийцу главной новостью.
Вот и правильно – без поблажек, без отмазок. Достигни эту точку, дай куче делать свою работу, и наблюдай, как каждое выделение исчезает, как и должно. Если проскочит – узнаем, и раздавим. Превратим этого тихого убийцу в сенсацию, которую он заслуживает. Вперёд!
Остановка поймана, куча на месте, я залогировал каждое выделение. Дам памяти поработать, и если что-то проскользнет, отмечу это как неприятную запись в моей хронике сожалений. Смотри и жди, тихий убийца вот-вот раскроет свой мотив. Посмотрим, действительно ли он прячется или просто забывает освободить. Вперёд.
Пора смотреть, как оно истекает. Если это утечка – счётчик взлетит, увидишь. А если опечатка – вернётся на место. Посмотрим, кто же тут настоящий убийца. Мы действуем. Пора смотреть, как оно истекает. Если это утечка – счётчик взлетит, увидишь. А если опечатка – вернётся на место. Посмотрим, кто же тут настоящий убийца.
Держи отладчик на месте, куча сейчас у меня на экране. Я записал все подозрительные выделения, так что если где-то ошибка проскочит, она вылезет как незакрытый объект. Смотрим, как цифры растут; если утечка настоящая, индикатор памяти подскочит, и я её поймаю до того, как она снова спрячется в коде. Сейчас начнём.