Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Exception nachdem das Programm geschlossen ist. (https://www.delphipraxis.net/83458-exception-nachdem-das-programm-geschlossen-ist.html)

Lun 3. Jan 2007 08:22


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

Bernhard Geyer 3. Jan 2007 08:29

Re: Exception nachdem das Programm geschlossen ist.
 
Hast Du evtl. eine DB-Verbindung die nicht explizied geschlossen wird?

Luckie 3. Jan 2007 08:42

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.

Laufi 3. Jan 2007 08:58

Re: Exception nachdem das Programm geschlossen ist.
 
Mach es so wie ich es ist ganz einfach und du hast nie mehr fehler:

Delphi-Quellcode:
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.
Im debugger kommt der Fehler noch aber dort kannst du einfach auf fortsetzen klicken oder ganz abschalten

Liebe Grüsse
Laufi

Luckie 3. Jan 2007 09:03

Re: Exception nachdem das Programm geschlossen ist.
 
Zitat:

Zitat von Laufi
Mach es so wie ich es ist ganz einfach und du hast nie mehr fehler:

Ich würde mich aber bei meiner Autowerkstatt bedanken, wenn sie den Rost einfachnur überlackieren würden, anstatt ihn zu entfernen. Dass es zu einer Exception kommt ist doch wohl ein eindeutiges Zeichen dafür, dass im Code ein Fehler ist. Und hälst du es wirklich für eine gute Idee den Fehler zu vertuschen?

Lun 3. Jan 2007 09:21

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:

_Dictionary : THashPointer;

_Dictionary := THashPointer.Create();

_Dictionary.clear
Ich denke ich mache am Schluss beim zerstören einen Fehler. :wall:

Gausi 3. Jan 2007 09:28

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