Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: XE7, Eurekalog7, MadExcept, AV

  Alt 11. Mär 2015, 19:13
Es gibt mehrere Ansätze. Einmal kannst du versuchen im CleanupInstance oder weiter höher im Stacktrace eine Stelle zu finden, an der ClassName noch einen gültigen Wert enthält. Das dann im Debugger per Haltepunkt-Eval ausgeben lassen und durchlaufen lassen. Dauert dann, aber irgendwann kommt die Exception und man kann schauen, ob der ClassName direkt vorher einen Wert hatte.

Wenn ja, kannst du daraus evtl. schon etwas ableiten.

Wenn nein oder du keinen gültigen Klassennamen mehr bekommst, gibt es Hilfsmittel wie DDDebug, aber mit Bordmitteln kannst du auch einfach z.B. im TObject.AfterConstruction jeweils die Self-Speicheradresse plus ClassName loggen. Die Self-Adresse kannst du dann wiederum im CleanupInstance abgreifen und im Log suchen.
Wenn du dann den Klassennamen hast, kannst du auch den Stacktrace mitloggen lassen, wenn du noch keine andere Idee hast.

Das sind relativ langwierige Methoden, die dafür sehr einfach sind. Es gibt auch kompliziertere Vorgehensweisen, denn der Speichermanager von FastMM hat z.B. auch Infos über die Objekte, aber das braucht etwas mehr Erklärung.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat