Frage

Wie kann ich alle instanziiert Objekte in allen Anwendungsliste mit FASTMM4 oder Standard-Speicher-Manager?

War es hilfreich?

Lösung

Sie könnten wahrscheinlich tun dies mit FastMM4, aber es wäre ein komplizierter sein. Versuchen Sie den Code für die Prozedur ScanForMemoryLeaks untersuchen, um zu sehen, wie es gemacht wird.

Diese Routine prüft alle zugewiesenen Heap-Speicher gegen die Liste der erwarteten Speicherlecks und Berichte alles, was oben zeigt, eine Zählung und die Objektklassennamen einschließlich, wenn es Objekte findet. Was Sie tun möchten, ist es, alle zugewiesenen Heap-Speicher zu prüfen und berichten über die Zählung und Objektklasse Namen aller Objekte, die Sie finden, so ist es eine wirklich ähnliche Aufgabe. weglassen nur die registrierten Zeigerliste prüfen und auszufiltern alles, was nicht ein Objekt ist.

Andere Tipps

Nun, es ist nicht unterstützt und nicht gefördert, sondern je nach Situation könnten Sie in der Lage sein TObject zu bearbeiten Schöpfung und Zerstörung aufnehmen - da alle Objekte sind TObject dies könnte den Trick. Jedoch die VCL Modifikation ist wirklich wirklich verpönt, so frage ich mich, könnten Sie einen Helper Object (seit 2006 verfügbar glaube ich) verwenden, um die gleiche Sache zu tun. Schreiben Sie in eine andere Liste usw. mit Details jedes Objekt erstellt hat.

Eine interessante Art und Weise Tony Allen Vorschlag zu implementieren könnte sein, die Objekterstellung und Zerstörung Methoden zur Laufzeit haken. Es gibt eine interessante Bibliothek auf Google Code, der Teil des AsmProfiler Projekt (ein sehr schönes Stück Arbeit IMHO) ist, die den Trick tun könnte. Hier ist der Link zu der Seite KOLDetours Einheit das tut alle schweres Heben.

FWIW implementiert ich einen Rahmen zurück in den Delphi 4/5 Tage, die eine instrumentierte Basisklasse enthalten, die gegebenenfalls Objekterstellung / Zerstörung verfolgt. Dies funktionierte gut für das Aufspüren von Lecks Objekt und solche, sondern erzeugt eine enorme Menge an Informationen. FASTMM4 ist eine viel bessere Option, wenn alles, was Sie wissen müssen, ist das, was Objekte beim Herunterfahren geleckt haben.

Sie können die Speicher-Manager ändern SetMemoryManager durch den Aufruf. Sie können Ihre eigenen MM, schreiben, die eine einfache Stub sein wird: es werden alle Anrufe zu alt MM umleiten (die FastMM ist, können Sie es erhalten, indem GetMemoryManager Aufruf) und melden Sie sich alle Speicheroperationen irgendwo. Sie können durch einen Blick auf Call-Stack-Objekt-Erstellung / Zerstörung erkennen. Aufruf sollte von TObject des NewInstance Verfahren hergestellt werden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top