AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Erstellte Objekte zur Laufzeit ermitteln?
Thema durchsuchen
Ansicht
Themen-Optionen

Erstellte Objekte zur Laufzeit ermitteln?

Ein Thema von Getox · begonnen am 12. Okt 2020 · letzter Beitrag vom 12. Okt 2020
Antwort Antwort
Getox

Registriert seit: 28. Dez 2012
155 Beiträge
 
Delphi XE3 Professional
 
#1

Erstellte Objekte zur Laufzeit ermitteln?

  Alt 12. Okt 2020, 09:28
Hallo, gibt es eine Möglichkeit erstellte Objekte zur Laufzeit zu ermitteln?

Ich habe hier das Problem, dass bei einer Aktion der verwendete Speicher der Anwendung unfassbar steigt. Es geht um mehrere Drucke, die mit Quickreport erzeugt werden in einer historisch gewachsenen Unit. Wenn ich das Programm beende, wird der Speicher wieder freigegeben. Daher kann ich das problem auch nicht mit Hilfe der Leak Detection(MadExcept) ermitteln... Es ist aber erforderlich, dass der Speicher nach dem Druck direkt wieder freigegeben wird. ich finde aber nicht, an welcher Stelle das Problem ist. Daher wäre eine Liste hilfreich, die sämtliche erzeugten Objekte zur Laufzeit anzeigt, während ich mich an einem Breakpoint befinde.
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?
  Mit Zitat antworten Zitat
sahimba

Registriert seit: 14. Nov 2011
Ort: Berlin, Hauptstadt der DDR
137 Beiträge
 
Delphi 10 Seattle Professional
 
#2

AW: Erstellte Objekte zur Laufzeit ermitteln?

  Alt 12. Okt 2020, 09:38
Hallo, gibt es eine Möglichkeit erstellte Objekte zur Laufzeit zu ermitteln?
Das ist genau der Anwendungsfall für http://ddobjects.de/dddebug
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Erstellte Objekte zur Laufzeit ermitteln?

  Alt 12. Okt 2020, 11: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).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

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

Registriert seit: 14. Nov 2011
Ort: Berlin, Hauptstadt der DDR
137 Beiträge
 
Delphi 10 Seattle Professional
 
#4

AW: Erstellte Objekte zur Laufzeit ermitteln?

  Alt 12. Okt 2020, 16:55
*gelöscht*

Geändert von sahimba (12. Okt 2020 um 16:56 Uhr) Grund: Soll der Poster doch selber schauen was geht und was nicht
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Erstellte Objekte zur Laufzeit ermitteln?

  Alt 12. Okt 2020, 16:58
Hallo,
Zitat:
Wenn ich das Programm beende, wird der Speicher wieder freigegeben.
Das macht Windows, aber FastMM4 zeigt dir den offenen Speicher an.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Erstellte Objekte zur Laufzeit ermitteln?

  Alt 12. Okt 2020, 17:19
Ja, spätestens dann.

Zitat:
Wenn ich das Programm beende, wird der Speicher wieder freigegeben.
Die Frage ist halt wann das ist.

* vor der Leckprüfung (siehe das Beispiel mit dem TEdit)
* oder danach (ganz am Ende durch Windows, wo FastMM und Co. vorher noch nachsehen kann)

Aber auch mit dem Davor ist so Einiges möglich.
Zitat:
Wenn ich das Programm beende, wird der Speicher wieder freigegeben. Daher kann ich das problem auch nicht mit Hilfe der Leak Detection(MadExcept) ermitteln
Ich weiß grad nicht ob madExcept und/oder FastMM4, aber Teilweise ist es auch zur Laufzeit möglich, manuell eine Leak-Prüfung anzustoßen.
* ein Snapshot, dann eine Aktion ausführen (Drucken), und anschließend prüfen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
sahimba

Registriert seit: 14. Nov 2011
Ort: Berlin, Hauptstadt der DDR
137 Beiträge
 
Delphi 10 Seattle Professional
 
#7

AW: Erstellte Objekte zur Laufzeit ermitteln?

  Alt 12. Okt 2020, 17:43
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.
Wenn 99,99% reichen (mit einer Ausnahme die mir in 10 Jahren einmal begegnet ist) dann schon. Siehe oben.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Erstellte Objekte zur Laufzeit ermitteln?

  Alt 12. Okt 2020, 17:58
Hallo,
siehe hier
https://mikejustin.wordpress.com/201...-with-fastmm4/
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz