Wie kann ich alle instanziierten Objekte in allen Anwendungen mit FASTMM4 oder dem Standard-Speichermanager auflisten?Wie listet alle instanziierten Objekte auf?
Antwort
Sie könnten wahrscheinlich tun dies mit FastMM4, aber es wäre ein komplizierter sein. Versuchen Sie, den Code für die Prozedur ScanForMemoryLeaks zu untersuchen, um zu sehen, wie es gemacht wird.
Diese Routine überprüft alle zugewiesenen Heap-Speicher gegen die Liste der erwarteten Speicherlecks und meldet alles, was oben zeigt, eine Zählung und die Objektklassennamen einschließlich, wenn es Objekte findet. Was Sie tun möchten, ist, den gesamten zugewiesenen Heap-Speicher zu überprüfen und den Zähl- und Objektklassennamen aller gefundenen Objekte zu melden, also ist es eine wirklich ähnliche Aufgabe. Lassen Sie die registrierte Zeigerliste einfach aus und überprüfen Sie alles, was kein Objekt ist.
Auch seine 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 den Trick tun könnte. Allerdings ist das Modifizieren der VCL wirklich verpönt, also frage ich mich, ob Sie ein Helper-Objekt (das seit 2006 verfügbar ist, denke ich) das gleiche tun können. Schreiben Sie in eine andere Liste usw. mit Details zu jedem erstellten Objekt.
Nein, Sie können dafür kein Hilfsobjekt verwenden. – gabr
Gut! Sollte funktionieren, aber ich denke VCL-Standardeinstellungen ändern ist die letzte Option, aber wenn es keine andere Lösung gibt, werde ich das tun. Vielen Dank. –
@gabr: Wenn die Liste eine globale ist, kann er .. Was er nicht mit einem Helfer kann ist Instanzdaten zu erstellen ... –
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, die Teil des AsmProfiler-Projekts ist (ein sehr schönes Stück IMHO), das den Trick machen könnte. Hier ist der Link zu der KOLDetours Einheit, die alle schweres Heben tut.
FWIW implementiert I einen Rahmen zurück in den Delphi 4/5 Tage, die einen instrumentierten Basisklasse enthalten, die gegebenenfalls Objekterstellung/Zerstörung verfolgt. Dies funktionierte gut zum Aufspüren von Objektlecks und dergleichen, erzeugte jedoch eine enorme Menge an Informationen. FASTMM4 ist eine viel bessere Option, wenn Sie nur wissen müssen, welche Objekte beim Herunterfahren geleakt haben.
Sie können den Speichermanager ändern, indem Sie SetMemoryManager aufrufen. Sie können Ihr eigenes MM schreiben, das ein einfacher Stub sein wird: es wird alle Anrufe zu altem MM umleiten (was FastMM ist, Sie können es erhalten, indem Sie GetMemoryManager aufrufen) und alle Speicheroperationen irgendwo protokollieren. Sie können die Objekterzeugung/-zerstörung erkennen, indem Sie sich die Aufrufliste ansehen: Der Aufruf sollte von der NewInstance-Methode von TObject erfolgen.
- 1. Alle instanziierten JavaScript-Objekte erhalten und Werte aktualisieren
- 2. Listet alle Objekte auf, die die Knotenschnittstelle implementieren
- 3. Wie listet man alle Verzeichnisse rekursiv auf?
- 4. Wie listet man alle Git-Tags auf?
- 5. (C++ Query) Zugriff auf die instanziierten Objekte global
- 6. NullReferenceException auf instanziierten Objekt?
- 7. Wie listet _all_ Objekte in Amazon S3-Bucket auf?
- 8. Applescript - listet alle laufenden Anwendungen auf
- 9. Listet alle Visualisierungen in Kibana auf 4.1.1
- 10. Salt-stack listet alle verfügbaren Zustände auf
- 11. Wie listet man alle verwalteten Objekte im Heap in .Net auf?
- 12. Wie listet ich alle Objekte auf, die in Ruby aus einer Klasse erstellt wurden?
- 13. Listet alle globalen Variablen in Node.js auf
- 14. Listet alle derzeit geöffneten Dateizugriffsnummern auf?
- 15. Wie listet man alle Lesezeichen in NERDTree von VIM auf?
- 16. WIE show listet alle vom SET-Operator initialisierten Variablen auf?
- 17. Titan db wie listet man alle graphischen Indexe auf
- 18. Wie listet man alle Umgebungsvariablen in Vim auf?
- 19. Wie listet man alle X11-Fenster mit Gtk3 auf :: Gdk
- 20. Wie listet man alle Elemente einer Anwendung auf?
- 21. Wie listet man alle verfügbaren Gebietsschemata in Rails auf?
- 22. Wie sortiere ich oder listet alle "ausstehende" Status auf
- 23. Wie listet man alle Symbole auf, die em ++ gefunden hat?
- 24. Wie listet man alle Benutzer in der Mongo Shell auf?
- 25. Wie listet man alle internen Variablen von Julia auf?
- 26. Wie listet ich alle systemd maskierten Einheiten auf?
- 27. PostgreSQL: Wie listet man alle verfügbaren Datentypen auf?
- 28. Wie listet ich alle verfügbaren Tastaturlayouts in X.org auf?
- 29. Wie listet man alle Swift-konformen Klassen auf?
- 30. Listet alle bekannten NumPy-Arrays im Python-Interpreter auf
Warum möchten Sie diese Informationen? Suchst du nach Speicherlecks? Ich denke, dass es dann einen anderen Weg geben kann. – Alex
@Alexander: Nein, Mann! FASTMM4 zeigt Speicherlecks leicht, in Wahrheit wollte ich wissen, ob eine bestimmte Klasse bei VCL geladen wurde und wer es instanziiert hat, aber jetzt überlasse ich einfach diese Frage. Vielen Dank! –