Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Grund für Runtime Error 216 finden (https://www.delphipraxis.net/182664-grund-fuer-runtime-error-216-finden.html)

MartinK 9. Nov 2014 09:28

Grund für Runtime Error 216 finden
 
Mein Programm zeigt mir seit einer Umstellung von normalen Arrays auf ein Array auf einen RecordTypen beim Beenden jedesmal einen RT Error 216 (Adresse 00409472)
ich weiß, Dank dem Debugger, auch dass der Fehler in der unit System in der proceudre FinalizeUnits auftritt
Aus einigen Threads hier im Forum ebenso das vermutlich ein generiertes Objekt nicht richtig freigegeben wird und beim beenden weiterer Formulare zu dem Fehler führt.

Mit diesen Aussagen kann ich nur leider den Fehler nicht finden, da ich nicht weiß wie ich dabei vorgehen soll.
Wie macht man denn so etwas?

LG Martin

Dejan Vu 9. Nov 2014 09:38

AW: Grund für Runtime Error 216 finden
 
Kompiliere dein Projekt mit System Debug-Units und setze einen Breakpoint auf das 'END.' der Hauptanwendung. Dann führe den Rest Schrittweise aus. im FinalizeUnits wird der FinalisierungsCode aller Units nacheinander aufgerufen. In einer davon knallt es. Mit 'schrittweiser Ausführung' findest Du dann die Stelle.

jaenicke 9. Nov 2014 10:20

AW: Grund für Runtime Error 216 finden
 
Der Fehler tritt oft auch auf, wenn ein Objekt doppelt freigegeben wird.

Sehr einfach sollte solch ein Fehler mit FastMM zu finden sein. ;-)

Dejan Vu 9. Nov 2014 10:44

AW: Grund für Runtime Error 216 finden
 
Stimmt, mit FastMM sollte man anfangen.

himitsu 9. Nov 2014 11:54

AW: Grund für Runtime Error 216 finden
 
Benutzt du Packages?

Sind bei dir Units möglichst immer im Interface eingebunden (uses) oder auch zu oft grundlos in Implementation?


Wenn man da z.B. Objektreferenzen ungünstig verwaltet und dann z.B. noch nach dem freigeben der Unit oder eines Packages benutzt, dann dann das schnell mal knallen.
Beim "externen"/großen FastMM kann man einige FullDebug-Features einbinden, wo man auch doppelte Freigaben und (schreibende) Speicherzugriffe nach dem Freigeben erkennen lassen kann.

MartinK 9. Nov 2014 13:05

AW: Grund für Runtime Error 216 finden
 
Danke euch zunächst schon mal

na dann werde ich mal mit FastMM starten, denn beim debuggen merke ich nur "das" es "knallt" ;) und nicht wieseo

teebee 9. Nov 2014 15:08

AW: Grund für Runtime Error 216 finden
 
Wenn Du mit Arrays arbeitest, kann es auch sinnvoll sein, zu Debugging-Zwecken mal die Bereichsüberprüfung einzuschalten. Array-Grenzen zu verletzen kann zu viel späteren Zeitpunkten für Probleme sorgen.

MartinK 9. Nov 2014 16:43

AW: Grund für Runtime Error 216 finden
 
@Teebee: DAs war "DER" Tipp.

Ich hatte 2 Stellen "Schreibfehler" im Sourcecode die mir früher nie aufgefallen sind.
Durch die bereichsüberprüfung fielen diese bereits beim Programmstart auf ... wurden korrigiert
und damit war ich auch den RT Error 216 los.

Dickes danke dafür !
Die Bereichsprüfung ist ab sofort stanbdardmässig auf "on"

teebee 9. Nov 2014 17:04

AW: Grund für Runtime Error 216 finden
 
Zitat:

Zitat von MartinK (Beitrag 1279225)
Die Bereichsprüfung ist ab sofort stanbdardmässig auf "on"

Würde ich beim Release rausnehmen, macht die Anwendung langsamer (muss nicht spürbar sein) und größer.

Luckie 10. Nov 2014 01:22

AW: Grund für Runtime Error 216 finden
 
RT 216 ist eine Access Violation. Also in der Regel ein Zugriff auf einen ungültigen Speicherbereich. Kann bei dynamischen Arrays durch eine Unachtsamkeit schnell passieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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 by Thomas Breitkreuz