Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Runtime Error 216 (https://www.delphipraxis.net/116086-runtime-error-216-a.html)

hsbc 23. Jun 2008 10:22


Runtime Error 216
 
Hallo allerseits,

Meine Delphi-Anwendung liefert eine Fehlermeldung:

Zitat:

Anwendung hat einen Fehler festgestellt und muss beendet werden.
...
Melden / Nicht melden
Wenn ich nun auf Nicht melden drücke, so erscheint ein weiteres kleines Fenster mit folgendem Inhalt:

Zitat:

Runtime Error 216 at 00404126
Das Interessante ist, dass die Anwendung entgegen der Meldung nicht beendet wird, sondern bis zum Schluss ordnungsgemäß abläuft.

Was sagt mir die Fehler-Adresse? Wie kann ich feststellen, warum der Fehler ausgelöst wird?

Ja, noch was: Die Meldung kommt nur dann, wenn im Hintergrund ein Programm für ShutDown läuft, jedoch zu diesem Zeitpunkt keine Aktion auslöst. Wenn ich dieses ShutDown-Programm nicht laufen habe, kommen auch keine Fehlermeldungen von meinem Programm.
Starte ich von meiner Anwendung jedoch eine andere (ältere) Version, so funktioniert es auch parallel mit ShutDown.

Ein Virus ist ebenfalls keiner auf der Platte. Diese wurde komplett mit dem neuesten Virenscanner Avira AntiVir Personal durchgescannt.

Wie kann ich vielleicht auf Grund der Fehler-Adresse herausfinden, was die Ursache ist.

mfg
Herbert

alzaimar 23. Jun 2008 10:27

Re: Runtime Error 216
 
Der Fehler tritt auf, nachdem das Delphiprogramm (Application-Object) beendet wurde. Du kannst versuc hen, mit dem integrierten Debugger der IDE den Fehler zu lokalisieren. Stelle die Compiler-Option 'Mit Debug-DCU' in den Projektoptinen ein, setze einen Breakpoint auf die letzte Zeile des Programmquelltextes (auf das 'End.') und beende dein Programm in der IDE.
Dann gehst Du per Einzelschritt vorwärts. Diese Fehler sind nicht leicht zu lokalisieren, vermutlich wird irgendwo im finalization-Abschnitt ein Objekt verwendet, das nicht mehr gültig ist. Kandidaten dafür sind z.B. Threads, die in ihrer Terminationsroutine auf Objekte der Unit 'Classes' zugreifen, die aber schon freigeben wurden.
Abhilfe: Gib die Threads frei BEVOR das Programm terminiert.

Virus & Co kann man zu 99.999% ausschließen. Der Fehler liegt :zwinker: immer im Programm(ierer).

hsbc 23. Jun 2008 10:52

Re: Runtime Error 216
 
Hallo,

das ging aber schnell.

Kann es sein, dass ein Timer die Ursache sein könnte? Ich werde mir mal ansehen, ob dieser zum Zeitpunkt des Beendens noch enabled ist.

Das Problem beim Debuggen ist folgendes:

Auf dem Rechner, wo der Fehler auftritt, ist kein Delphi installiert.
Auf meinem Delphi-Rechner hingegen tritt dieser Fehler überhaupt nie auf.

mfg
Herbert

Luckie 23. Jun 2008 10:57

Re: Runtime Error 216
 
Kleiner Tipp, guck mal in der Hilfe nach, was Laufzeitfehler 216 ist.

hsbc 23. Jun 2008 11:13

Re: Runtime Error 216
 
Hallo nochmals,

ich lese schon eine ganze Zeit lang in den diversen Unterlagen. Zum Fehler 216 gibt es leider keine eindeutige Antwort. Einmal heisst es, es kann ein Virus (Trojaner SubSeven) sein, dann heisst es wieder, es können Programme sein, die im Hintergrund laufen, usw.

Ich glaube aber, dass es doch an meiner Application liegen muss, obwohl auf verschiedenen Rechnern verschiedene Ergebnisse entstehen.

Bei dem obigen Tipp mit dem Breakpoint bin ich auf folgende Routine einer eingebundenen Indy-Unit gekommen:

Delphi-Quellcode:
initialization
  RegisterFTPListParser(TIdFTPLPMusic)
finalization
  RegisterFTPListParser(TIdFTPLPMusic)
end;
Das kann doch nicht stimmen. In der finalization sollte doch stehen: UnRegister....

Ich habe das mal geändert und neu compiliert. Mal sehen, was passiert.

mfg
Herbert

Luckie 23. Jun 2008 12:03

Re: Runtime Error 216
 
also meine Hilfe sagt ganz eindeutig dazu:
Zitat:

216 Schutzverletzung EAccessViolation
Und warum sollte ein anderes Programm in deiner Anwendunge eine AccessViolation auslösen?

hsbc 23. Jun 2008 12:12

Re: Runtime Error 216
 
Hallo Luckie,

genau, das ist ja auch meine Meinung, nur wie komme ich dem Übeltäter auf die Spur.

Wie könnte ich vorgehen, um die Ursache zu finden?

Kann ich aufgrund der Fehler-Adresse etwas finden?

mfg
Herbert

RavenIV 23. Jun 2008 12:31

Re: Runtime Error 216
 
Verwendest Du dll's?
Dann fehlt bestimmt ein ShareMem in der dpr als ersten Eintrag bei den uses.
Wenn Du eine dll per Assistent erstellst, wird in den dpr der dll ein Hinweis auf sharemem gegeben.

Falls ohne dll, dann kannst Du die sharemem trotzdem einbinden. Tut ja nicht weh.

toms 23. Jun 2008 12:33

Re: Runtime Error 216
 
Zitat:

Zitat von hsbc
Wie könnte ich vorgehen, um die Ursache zu finden?

Kann ich aufgrund der Fehler-Adresse etwas finden?

Hallo, du könntest mal madexcept installieren.
Sollte dir dann die Zeile im Code angeben, wo der Fehler herkommt.

hsbc 23. Jun 2008 13:02

Re: Runtime Error 216
 
@RavenIV

Wenn ich ShareMem hinzufüge, kommen auch auf dem Entwickler-PC folgende Fehler:

Runtime Error 216 at 00404172 und nach wiederholten Aufrufen
Runtime Error 217 at 0041BED4


@toms

madexcept habe ich installiert. Muss ich da irgendetwas starten bzw. einfügen, damit ich etwas sehe?

mfg
Herbert


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 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