![]() |
Fehler in finalizeunits unit 28
hallo,
habe ein Problem und bin am Verzweifeln. Delphi 2007 Es ist ein recht grosses Projekt, und _manchmal_ (leider nicht immer, ich kann nicht herausfinden wovon es ebhängt) passiert beim Beenden des Programms in finalizeunits in unit 28 oder 27 :) eine access violation, zugriff auf adresse 0000000. Ich bin alle finalizations-sections durchgegangen, und der fehler passiert nach der letzten von mir geschriebenen finalization. Der zahl nach (28) nehme ich an, dass es eine unit ziemlich "tief" ist - sprich von delphi selbst. Wie kann ich herausfinden welche Unit Probleme macht? Die Datenstrukturen in System.pas sagen mir leider wenig. Habe schon Tage beim Debuggen verloren und komme nicht weiter kann jemand helfen? danke lg marius |
Re: Fehler in finalizeunits unit 28
Der Fehler weist auf einen Zugriff auf ein nicht instantiirtes bzw. bereits freigegebenes Objekt hin. Wie gibst du frei (FreeAnNil())?
|
Re: Fehler in finalizeunits unit 28
nicht alles, das projekt wurde von d5 auf d2007 portiert und ist ziemlich gross. gibt es eine chance den fehler einzugrenzen?
|
Re: Fehler in finalizeunits unit 28
Dir ist doch bekannt das im im finalization-Teil der Units 27 oder 28 auftritt.
|
Re: Fehler in finalizeunits unit 28
Nur wie bekommt man denn raus, wer Unit #27 und #28 ist?
|
Re: Fehler in finalizeunits unit 28
du solltest dir den callstack anschauen. Es bringt dir nichts wenn du heraus findest das der Fehler in der unit System auftaucht wenn diese versucht etwas bereits frei gegebenes nochmal freizugeben. Du solltest dann eher anhand des Stacks heraus finden was versucht wurde erneut frei zu geben (falls das der Fehler ist)
|
Re: Fehler in finalizeunits unit 28
Weiterhin könnte der Einsatz von FastMM oder MemCheck etwas bringen.
|
Re: Fehler in finalizeunits unit 28
|
Re: Fehler in finalizeunits unit 28
Schalte in den Projektoptionen beim Compiler die Option "Mit Debug-DCUs" ein und erstelle das komplette Projekt neu. Dann kannst du mit F7 und F8 das Finalization beim beenden der Applikation komplett durchgehen. Du kannst dafür ein Brechpunkt vor dem "end." im DPR setzen und von dort dann mit F7 hinterhergehen.
|
Re: Fehler in finalizeunits unit 28
Vielen Dank für die Tips! Habe jetzt mal überall FreeAndNil angeführt und in jedem Destructor jeder Klasse if Assigned() then FreeAndNil()... angegeben
warte jetzt bis der Fehler wieder kommt Die exception kommt leider _nach_ jeder im programmcode erfassten finalization section |
Re: Fehler in finalizeunits unit 28
hallo,
vielen dank für die hilfe! die Rätsels-lösung ist: ich habe AllocateHWND, DeallocateHWND in verschiedenen Threads aufgerufen. Beim Aufräumen gabs dann wohl offene/ungültige Handles. Das nicht deterministische Auftreten des Fehlers lag daran, dass die Threads manchmal gestartet wurden und manchmal nicht. gruss marius |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz