![]() |
Laufzeitfehler bei Programmende
Hallo,
bei Programmende wirft meine Anwendung eine Exception der Klasse $C00000005 read of adresse 0x0000000000. Beim Debuggen läuft alles bis ins OnClose des Formulars, das kann ich ohne Fehler durchsteppen und dann knallt es, das OnDestroy des Formulars (weiterer Haltepunkt) wird dann nicht mehr erreicht. Ich habe keine Ahnung wo ich da ansetzen könnte um die Ursache zu finden... Hat jemand einen Tip wie man hier generell vorgehen könnte? Ciao Stefan |
AW: Laufzeitfehler bei Programmende
Es ist so pauschal nicht zu sagen, aber irgendwo wird auf ein NIL-Pointer zugegriffen.
...:cat:... |
AW: Laufzeitfehler bei Programmende
Compiliere mit Debug-DCUs.
Bei mir war es mal das ein DB-Verbindung erst beim Aufräumen der Anwendung beendet wurde. Verlegt ins OnClose hatte geholfen. |
AW: Laufzeitfehler bei Programmende
Hallo,
läuft die Exe auf einem Netzlauwerk oder lokal? |
AW: Laufzeitfehler bei Programmende
Mit Debug DCU's compiliere ich bereits, nur wie sollen die bei der Fehlersuche helfen?
Dass da irgendwo auf etwas Nil zugegriffen wird, ist mir eigentlich klar, nur wie finde ich dieses? Ciao Stefan |
AW: Laufzeitfehler bei Programmende
Ich habe MadExcept eingebaut, welches auch bei einem provozierten Fehler (ButtonClick der Division durch 0 erzeugt) wunderbar anzeigt.
Erst kommt der Division durch 0 Fehler und danach geht das MadExcept-Fenster auf. Nur bei Programmende schlägt MadExcept nicht an, ich bekomme den oben gemeldeten Fehler ohne dass danach MadExcept aufgeht. Und nun??? Ach so, die Exe läuft lokal... Ciao Stefan |
AW: Laufzeitfehler bei Programmende
Wie sieht denn bei dem Fehler der Stacktrace aus?
// EDIT: Vermutlich passiert da etwas im finalization einer Unit oder bei der Freigabe eines Interfaces. Es kann auch ein weiteres Formular sein, das erst am Ende freigegeben wird und dabei einen Fehler verursacht. Zum Beispiel passiert so etwas, wenn man ein Objekt als Objekt UND als Interface anspricht und es dann aus Versehen freigibt. Dann wird am Ende das Interface versucht freizugeben, aber das Objekt ist schon weg. |
AW: Laufzeitfehler bei Programmende
Tja, wenn es im Delphi-Code nicht weiter geht, dann mußt du wohl in die Assembleransicht wechseln. :stupid:
Zeigt der Stacktrace irgendwas an? Wenn nicht, dann nochmal "F7" nach dem Fehler versuchen, eventuell vorher in den Assembler wechseln. Zitat:
Denn sonst heißt der Fehler ja "Fehler bei Adresse xxxx, Lesen/Schreiben von Adresse yyyy" und hier ist dieser Fehler an der Code-Adresse 0. Es kann natürlich auch etwas wie ein Buffer-Overflow sein, wo z.B. der Stack zerschossen wurde. |
AW: Laufzeitfehler bei Programmende
Hallo,
arbeitet Dein Programm mit Interfaces? |
AW: Laufzeitfehler bei Programmende
Zitat:
|
AW: Laufzeitfehler bei Programmende
Sind überall wo was erzeugt wird auch Schutz-Blöcke enthalten? (Try .... Finally)
Eventuelle AnsiChar <-> WideChar Konflikte? (hat man oft bei Übernahme eines alten non-Unicode Projekts) Falsch benutzte Pointer sind auch oft übel... |
AW: Laufzeitfehler bei Programmende
Werden ActiveX-Komponenten/TWebbrowser oder DLLs genutzt?
|
AW: Laufzeitfehler bei Programmende
Trotzdem wäre erst einmal wichtig zu wissen was Delphi selbst als Position anzeigt, wenn der Fehler auftritt. Der Stacktrace mag nicht korrekt sein, aber oft gibt er ja trotzdem einen Hinweis...
|
AW: Laufzeitfehler bei Programmende
Kann sein das man nix brauchbares bekommt wenn z.B. IE und Adobe-SW im Spiel ist.
Hier haben wir für die Release-Version das Eingebaut System.NoErrMsg := True; Um keine Meldung beim Kunden mehr zu bekommen. |
AW: Laufzeitfehler bei Programmende
Versuch es doch mal anders herum. Du suchst jetzt die Ursache des Fehlers. Konzentriere dich aber mal darauf, seit wann der Fehler auftritt und schau dann, was du seitdem geändert hast. Meistens findet es sich dort. Versionsverwaltungen helfen in diesem Fall extrem.
Nichts desto trotz kann der Fehler natürlich schon in altem SourceCode liegen, der sich bis heute nicht bemerkbar gemacht hat. Wenn also der obige Versuch fehlschlägt, dann musst du natürlich die Suche weiterführen. |
AW: Laufzeitfehler bei Programmende
Hallo,
du kannst auch auf das end. in der DPR einen Breakpoint setzen und dich dann per F7 bis zum Fehler durchhangeln. |
AW: Laufzeitfehler bei Programmende
Zitat:
In Unit System hier knallt es beim ersten Durchlauf: if InitContext.DLLInitState = 0 then while ExitProc <> nil do begin @P := ExitProc; ExitProc := nil; P; <---- hier access violation &C000000005 at 0x00000000000 read 0x00000000000 end; so richtig hilft das aber nicht weiter :-( Ciao Stefan |
AW: Laufzeitfehler bei Programmende
Hallo,
doch, hilft. Drück F7 bei P, dann springt er in die betreffende Exit-Methode der Unit. Du musst dich halt nur durchhangeln. Fang mal bei deinen Units, die finalization benutzen. |
AW: Laufzeitfehler bei Programmende
Die Sucherei hat ein Ende, nach Implementierung entsprechender Laufzeitpackages und aktueller DLL's funktioniert nun alles wie gewünscht :-)))
Ciao Stefan |
AW: Laufzeitfehler bei Programmende
Was hast Du denn wie implementiert?
Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22: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