FastMM неожиданно сообщает об утечке памяти в Graphics32 - PullRequest
0 голосов
/ 07 января 2011

У меня есть пустой проект (он содержит только форму). Если я добавлю эту строку в проект 'USES GR32_Image;' и запустить приложение, FastMM показывает утечку в программе. FastMM настроен на полную отладку. В моей программе НЕТ кода - кроме того, что генерирует Delphi IDE, и кроме строки «использует gr32».

Отчет не имеет смысла. Вот полный журнал: http://pastebin.com/Yhev3rJ2
А вот и исходный код: http://pastebin.com/VjRrRiS8

Я использовал модуль Graphics32 раньше, и у меня никогда не было проблем. Почему у меня такая утечка и почему FastMM не может сгенерировать правильный отчет?

Ответы [ 3 ]

8 голосов
/ 07 января 2011

Включите FullDebugMode, если вы используете полную версию FastMM4. Также включите детальную карту, чтобы помочь с трассировкой стека. Проверьте раздел инициализации модуля этого модуля и посмотрите, есть ли какие-либо проблемы.

3 голосов
/ 08 января 2011

Скомпилируйте ваше приложение с полной отладочной информацией, затем в настройках компоновщика убедитесь, что ваша отладочная информация находится в файле .EXE и / или .MAP.

Затем запустите FastMM с FullDebugMode и скопируйте / вставьтеПолученный файл .TXT в вашем вопросе.

См. также этот пост для получения дополнительных советов.

Редактировать:

AХороший первый шаг - сделать что-то подобное в вашем файле .TXT:

find "The allocation number is" < fastmmlog.txt | sort /R

Это даст вам первый номер распределения, в вашем случае 281.

Из этого вы будете искатьв .TXT для номера распределения:

--------------------------------2011/1/7 23:31:03--------------------------------
A memory block has been leaked. The size is: 20

This block was allocated by thread 0x1540, and the stack trace (return addresses) at the time was:
402D80 [System][System][@GetMem]
40388F [System][System][TObject.NewInstance]
403C12 [System][System][@ClassCreate]
4038C4 [System][System][TObject.Create]
403C12 [System][System][@ClassCreate]
403C6A [System][System][@AfterConstruction]
457922 [GR32_Bindings][GR32_Bindings][NewRegistry]
45807E [GR32_LowLevel][GR32_LowLevel][RegisterBindings]
458152 [GR32_LowLevel][GR32_LowLevel][GR32_LowLevel]
404373 [System][System][InitUnits]
4043DB [System][System][@StartExe]

The block is currently used for an object of class: TList

The allocation number is: 281

Здесь вы можете видеть, что NewRegistry участвует в вашей утечке.
Оттуда вы можете начать отладку, чтобы выяснить, почему она протекает.

- Йерун

0 голосов
/ 10 января 2011

Обе проблемы решены.

  1. Я вспомнил, что некоторое время назад я добавил эту строку кода в GR32.inc: {$ D-} Я удалил строку, перекомпилировал VCL иэто сработало.Совершенно моя вина.

  2. См. Пост Джероена Плюмера, который отвечает на вопрос «почему FastMM не может сгенерировать правильный отчет?»


Спасибовсем для участия.

...