Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#3

AW: Erstellte Objekte zur Laufzeit ermitteln?

  Alt 12. Okt 2020, 12:53
Hallo, gibt es eine Möglichkeit erstellte Objekte zur Laufzeit zu ermitteln?
Offiziell erstmal NEIN, da es keine Listen gibt, wo sich alle Objekte registrieren
und es ist nicht möglich mit 100%-iger Sicherheit Objekte im Speicher zu identifizieren.


Bei TForms gibt es in Screen eine Liste aller Forms, wo man auch via Parent/Owner alle Komponenten auf den Forms finden kann,
und bei einigen Klassen gibt es eigene Listen, aber global für "Alles" ... nein.

Man kann zwar den Arbeitsspeicher durchgehn und schauen ob etwas ein Objekt sein "könnte", aber man muß da mit False-Positivs leben.
> es lässt sich nur sagen "in dem Pointer ist kein Objekt" (nach Bufferoverflow, kann das auch "futsch" sein)
> aber zu 100% kann man nicht sagen "ja, es ist ein Objekt",
denn Reste eines alten/freigegebenen Objekts oder was Anderes, was zufällig der geprüften Struktur entspricht, das kann auch was Anderes oder garnichts mehr sein.


Im Delphi ist FastMM drin > Delphi-Referenz durchsuchenReportMemoryLeaksOnShutdown ,
aber im "großen" FastMM gibt es noch viel mehr Möglichkeiten.

FastMM, BrainMM , Deleaker, Delphi memory leak detector, ...
und zusätzlich noch Eurekalog, MadExcept, ...


PS: for var i := 0 to 1000 do TEdit.Create(Self); in einem Timer ist zwar sowas wie ein Laufzeit-Speicherleck,
aber z.B. ReportMemoryLeaksOnShutdown wird es nicht finden, da durch den Owner die vielen Edits "vorher" aufgeräumt werden, beim Beenden der Anwendung (beim Freigeben der Form).
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (12. Okt 2020 um 13:24 Uhr)
  Mit Zitat antworten Zitat