Как составить список всех объектов? - PullRequest
1 голос
/ 21 июня 2009

Как я могу перечислить все экземпляры объектов во всех приложениях, используя FASTMM4 или менеджер памяти по умолчанию?

Ответы [ 4 ]

3 голосов
/ 21 июня 2009

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

Эта процедура проверяет всю назначенную память кучи по списку ожидаемых утечек памяти и сообщает обо всем, что отображается, включая счетчик и имя класса объекта, если он находит объекты. Что вы хотите сделать, это проверить всю назначенную память кучи и сообщить количество и имя класса объекта всех объектов, которые вы найдете, так что это действительно похожая задача. Просто пропустите проверку списка зарегистрированных указателей и отфильтруйте все, что не является объектом.

1 голос
/ 21 июня 2009

Ну, это не поддерживается и не поощряется, но в зависимости от вашей ситуации вы можете редактировать объект TObject для создания и уничтожения записи - поскольку все объекты являются объектами TObject, это может помочь. Тем не менее, изменение VCL действительно вызывает нарекания, поэтому мне интересно, не могли бы вы использовать объект Helper (думаю, с 2006 года), чтобы сделать то же самое. Запишите в другой список и т. Д. Детали каждого созданного объекта.

0 голосов
/ 23 июня 2009

Вы можете изменить менеджер памяти, вызвав SetMemoryManager. Вы можете написать свой собственный MM, который будет простой заглушкой: он будет перенаправлять все вызовы на старый MM (который является FastMM, вы можете получить его, вызывая GetMemoryManager) и регистрировать все операции с памятью где-нибудь. Вы можете обнаружить создание / уничтожение объекта, посмотрев на стек вызовов: вызов должен быть сделан из метода NewInstance TObject.

0 голосов
/ 23 июня 2009

Интересным способом реализации предложения Тони Аллена может быть подключение методов создания и уничтожения объектов во время выполнения. В Google Code есть интересная библиотека, которая является частью проекта AsmProfiler (очень хорошая работа IMHO), которая может помочь. Вот ссылка на устройство KOLDetours , которое выполняет всю тяжелую работу.

FWIW Я внедрил фреймворк в Delphi 4/5 дней, который содержал инструментированный базовый класс, который опционально отслеживал создание / уничтожение объектов. Это хорошо работало для отслеживания утечек объектов и тому подобного, но генерировало огромное количество информации. FASTMM4 - намного лучший вариант, если все, что вам нужно знать, это то, какие объекты просочились при выключении.

...