Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   AV bei VCL.Forms.DoneApplication (https://www.delphipraxis.net/193643-av-bei-vcl-forms-doneapplication.html)

hzzm 25. Aug 2017 08:48

Delphi-Version: 10 Seattle

AV bei VCL.Forms.DoneApplication
 
Liste der Anhänge anzeigen (Anzahl: 1)
Circa jedes 10. Mal beim Schliessen meiner Anwendung kommt mein weisser Wal wieder zum Vorschein.

Vielleicht fehlt mir nur das Wissen, hier effektiv zu Debuggen.
Ich komme nicht weiter; woher kommt diese Access Violation oder welche Schritte kann ich unternehmen, um der Sache auf den Grund zu gehen?

Sorry fuer den screenshot der Situation. Aus undefinierbaren Gruenden denke ich, man kann sich so besser reinversetzen.

hoika 25. Aug 2017 09:16

AW: AV bei VCL.Forms.DoneApplication
 
Hallo,
wie gross ist denn deine Anwendung?

Ansatzpunkte sind:
- Speicherfehler
- Fenster 2 mal geschlossen
- Interfaces falsch benutzt (z.B. kein const bei Übergabe als Parameter)
- Frames
- Window-MessageLoop überschrieben

usw.

Herangehenseise:
- FastMM4 benutzen (also erste Unit in die DPR rein)
- so nachstellen, dass nicht bei jedem 10., sondern immer auftritt
also rausbekommen, was du konkret machst
- alle Unter-Fenster/Code komplett ausblenden und schrittweise wieder einblenden

Viel Glück

hzzm 25. Aug 2017 09:22

AW: AV bei VCL.Forms.DoneApplication
 
Zitat:

Zitat von hoika (Beitrag 1379438)
wie gross ist denn deine Anwendung?

Danke fuer Deinen Input.
Die Anwendung ist 82MB gross und verwendet vorrangig Frames statt Forms.

Den MessageLoop habe ich nicht ueberschrieben.

Beim Click des Haupt-Schliessen-Buttons fuehre ich "Application.Terminate;" aus. Eigentlich Hide()e ich da gar nichts von Hand.

Der schöne Günther 25. Aug 2017 09:41

AW: AV bei VCL.Forms.DoneApplication
 
Immerhin ist im Debugger "self" noch belegt: "StatusForm". Also echt nichts spannendes im OnDestroy dieser Form?

Auf jeden Fall FastMM einmal einbauen. Der überschreibt bei Freigaben alles direkt mit Nullen und merkt bei virtuellen Methoden (wie z.B. dem Destruktor) auch direkt wenn die Instanz (das Formular) bereits freigegeben ist.

hzzm 25. Aug 2017 09:51

AW: AV bei VCL.Forms.DoneApplication
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1379442)
Also echt nichts spannendes im OnDestroy dieser Form?

Die AV kam sowohl, wenn ich im FormDestroy eine Hand voll Objekte Free()e, als auch mit komplett leerem FormDestroy.

Ich hatte allerdings noch nicht das Vergnuegen, die AV mit eingeschaltetem FastMM4 zu kriegen.
Dieses event steht wohl noch aus und wuerde vielleicht einen Hinweis geben.

Der schöne Günther 25. Aug 2017 09:52

AW: AV bei VCL.Forms.DoneApplication
 
Ich hätte ja eher gedacht dass dieses Formular irgendwo manuell freigegeben wird, und das dann einmal zu einem Zeitpunkt wo es schon "von selbst" weg ist.

hzzm 25. Aug 2017 09:56

AW: AV bei VCL.Forms.DoneApplication
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1379445)
Ich hätte ja eher gedacht dass dieses Formular irgendwo manuell freigegeben wird, und das dann einmal zu einem Zeitpunkt wo es schon "von selbst" weg ist.

Das habe ich beim Sichten der AV auch immer gedacht; es gibt nur keine Stelle, an der ich meine MainForm einfach mal so manuell befreie...

Jumpy 25. Aug 2017 10:11

AW: AV bei VCL.Forms.DoneApplication
 
Muss es denn eine Form sein, kann es nicht ein Frame sein, der schon weg, ist, wo du doch wie du sagt viel mir Frames arbeitest.

hoika 25. Aug 2017 10:11

AW: AV bei VCL.Forms.DoneApplication
 
Hallo,
Zitat:

Beim Click des Haupt-Schliessen-Buttons fuehre ich "Application.Terminate;" aus.
Warum?

Close sollte doch reichen, oder ?

Machst in den Frames irgendwas mit Mainform umsetzen?

hzzm 25. Aug 2017 10:33

AW: AV bei VCL.Forms.DoneApplication
 
Zitat:

Zitat von hoika (Beitrag 1379449)
Close sollte doch reichen, oder ?

Machst in den Frames irgendwas mit Mainform umsetzen?

Ok, ist in Close; geaendert. Ich hatte keinen expliziten Grund, App.Terminate zu verwenden.
Wenn du mit 'umsetzen' meinst, dass sich irgendeine Aktion aus FrameCode auf die MainForm auswirkt, dann ja. Jede Menge.

Wenn Du mit 'umsetzen' einen Fenster-MOVE meinst, dann nein.

Um zirkulaere Referenzen dieser Art zu verhindern, habe ich diesen Workaround verwendet:
DP: zirkulaere-referenzen-aber-warum-nicht-so

Aber wenn ich mich recht erinnere, hatte ich meine AV sowohl vor als auch nach dieser Problembehandlung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 Uhr.
Seite 1 von 2  1 2      

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