![]() |
Exception nachdem das Programm geschlossen ist.
Hallo zusammen,
erstmal ein Frohes neues Jahr :cheers: ! Ich habe folgendes Problem, ich habe ein Programm das soweit durchläuft und keine Fehler aufweist. Wenn ich es kompeliert habe kann ich die exe auch ganz normal laufen lassen und beenden. Allerdings wenn ich die Application in Delphi 2005 starte (F9) läuft diese auch einwandfrei, aber manchmal wenn ich dann auf beenden gehe innerhalb des Programms wird mir eine Exception angezeigt, die unterschiedlich ausfällt zwei Beispiele: --------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt tröt.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 0000006E. Lesen von Adresse 0000006E' aufgetreten. --------------------------- --------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt tröt.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 00403C00 in Modul 'tröt.exe'. Lesen von Adresse 00000012' aufgetreten. --------------------------- Die Exception wird nach dem Application.Terminate aufgerufen, aber wie gesagt auch nicht immer nur ab und an. Woran kann das liegen, habe ich vielleicht Objecte nicht richtig freigegeben oder spinnt die IDE? Ich habe mal Fastmm4 dazwischen gesetzt und habe das Gefühl das mir die Exception nicht angezeigt wird, oder unterdrückt Fastmm Exceptions und deswegen kommt diese nicht vor? greetz Lun |
Re: Exception nachdem das Programm geschlossen ist.
Hast Du evtl. eine DB-Verbindung die nicht explizied geschlossen wird?
|
Re: Exception nachdem das Programm geschlossen ist.
Gibst du Objekte frei, die schon automatisch von dr VCL freigegeben wurden? Ohne etwas Code oder Informationen, was das Programm macht und was für zusätzliche Komponenten verwendet werden, kann man hier nur raten.
|
Re: Exception nachdem das Programm geschlossen ist.
Mach es so wie ich es ist ganz einfach und du hast nie mehr fehler:
Delphi-Quellcode:
Im debugger kommt der Fehler noch aber dort kannst du einfach auf fortsetzen klicken oder ganz abschalten
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private-Deklarationen } procedure Machnichts(Sender: TObject; E: Exception); public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Machnichts(Sender: TObject; E: Exception); begin end; procedure TForm1.FormCreate(Sender: TObject); begin Application.OnException:= Machnichts; end; end. Liebe Grüsse Laufi |
Re: Exception nachdem das Programm geschlossen ist.
Zitat:
|
Re: Exception nachdem das Programm geschlossen ist.
Hi @ll,
erstmal Thx für eure Antworten, sorry Laufi denke auch nicht das es im Sinne des Erfinder war es so zu lösen. Und sorry, das ich es verpeilt habe etwas code mitzugeben, aber ich war im Moment etwas Ratlos woher überhaupt die Exception kommt, da ich die vorher ja auch nicht hatte. Aber ich konnte das Problem jetzt etwas eingrenzen. Ich denke das die Exception sich um zwei Hashpointer dreht, da ich meine Änderungen soweit zurück gedreht habe bis auf die Hashpointer, erst wenn ich die deklaration und definition bzw. das löschen auskommentiere, fällt die Exception weg. Also die Zeile reichen aus um eine Exception aufzurufen, beim beenden.
Delphi-Quellcode:
Ich denke ich mache am Schluss beim zerstören einen Fehler. :wall:_Dictionary : THashPointer; _Dictionary := THashPointer.Create(); _Dictionary.clear |
Re: Exception nachdem das Programm geschlossen ist.
Ich hatte mal ein ähnliches Problem. Auch der Effekt, dass mit FastMM keine Exception kam und ohne doch (oder andersrum), kommt mir bekannt vor.
Bei mir lag es (wie Luckie schon sagte) daran, dass ich einige VCL-Objekte selbst freigegeben habe und/oder Parents einzelner Controls auf andere Forms gesetzt habe und diese im Programmverlauf manchmal freigab. Behoben wurde es damit, dass ich die Objekte eben nicht selbst freigebe, sondern das der VCL überlasse. Dass FastMM EInfluss auf das Auftreten hat, dürfte daran liegen, dass sich durch dessen Verwendung die zeitliche Reihenfolge der "Aufräumaktionen" evtl. etwas verändert. Ich kenne THashPointer nicht, aber gibt man den nicht mit .Free frei? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 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