AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Exception beim Schließen ohne genauen Hintergrund
Thema durchsuchen
Ansicht
Themen-Optionen

Exception beim Schließen ohne genauen Hintergrund

Ein Thema von s.h.a.r.k · begonnen am 4. Apr 2008 · letzter Beitrag vom 8. Apr 2008
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Exception beim Schließen ohne genauen Hintergrund

  Alt 4. Apr 2008, 22:41
Guten Abend,

so komisch sich der Thread-Titel anhört, so komisch ist mein Problem auch. Ich habe eine Anwendung mit mehreren Klassen, mehreren Dialogen etc. Nun ist es so, dass ich mir einen ObjektManager erstellt habe, von dem aus alle Objekte erstellt werden, also ein Baum mit einer Instanz des ObjektManager als Wurzel. Wende ich dann am Schluss, d.h. beim OnClose des Programms FreeAndNil(); auf diesen an, wird jedes Objekt brav vernichtet.

Seit heute ist es aber so, dass auf einmal eine Exception (Zugriffsverletzung an ...) auftritt, wenn ich das Programm schließe. Natürlich arbeite ich immer weiter an dem Objekt. Allerdings habe ich nur einige kleine Details daran geändert. Wenn die Exception auftritt und ich dann auf Anhalten klicke springt die IDE nicht zu dem Punkt, an dem die Exception auftritt. Ich habe das Problem soweit eingrenzen können, dass ich weiß, dass beim FreeAndNil(); auf eine Form bzw. bei dessen Ausführung, die ich über den ObjektManager erzeugt habe der Fehler auftritt. Ich habe mir zwei Haltepunkte gesetzt. Einen genau auf den Befehl, der nach Ausführung die Exception wirft und einen danach. Drücke ich F9 erscheint die Exception und ich weiß nicht wieso. Vielleicht kennt das Problem jemand?

Des Weiteren habe ich probiert dieses FreeAndNil() heraus zu lassen. Sogar mit Erfolg, nur finde ich es total unzufriedenstellend, da es einfach unsauber ist. Unsauber und unschön... Windows holt sich doch zwar den Speicher zu zurück (oder irre ich hier?), aber ich will alles selbst kontrollieren, auch wenn es nur beim Schließen auftritt, an einer Stelle wo es mir egal sein könnte.

Mit freundlichen Grüßen
der Hai
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
busybyte

Registriert seit: 15. Sep 2006
165 Beiträge
 
#2

Re: Exception beim Schließen ohne genauen Hintergrund

  Alt 4. Apr 2008, 23:01
Meine Gedanken:
Möglichkeit 1: ein Objekt wurde bereits freigegeben
zu prüfen mit if not (irgendwas=nil) oder if Assigned(irgendwas) then freeandnil(irgendwas);

Möglichkeit 2a: ein Timer oder Thread versucht noch auf das Objekt zuzugreifen
alle Timer im OncloseQuerry stoppen bzw.Threads terminieren

Möglichkeit 2b: eine andere Methobe bzw. Objekt versucht noch auf das Objekt zuzugreifen
Lösung nur mit Quellcode möglich,da Glaskugel leider defekt.
I love DiscCat
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Exception beim Schließen ohne genauen Hintergrund

  Alt 4. Apr 2008, 23:05
Zitat von busybyte:
zu prüfen mit if not (irgendwas=nil) oder if Assigned(irgendwas) then freeandnil(irgendwas);
Das FreeAndNil(irgendwas); würde vollkommen reichen, da die Abfrage auf NIL im enthaltenen Free gemacht wird.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

Re: Exception beim Schließen ohne genauen Hintergrund

  Alt 5. Apr 2008, 18:47
Das Problem ist aber, wie ich an die Stelle gelange, die den Fehler verursacht. Bisher ist Delphi ja immer an die passende Stelle gesprungen, aber irgendwie tut es da ja nicht. Ich weiß in dem Fall nicht wirklich wie ich eben da hin komme. Über das CPU-Fenster habe ich es auch schon probiert, allerdings gelange ich da nur an die Stelle, an der die Exception geworfen wird. Das hat ja nichts mit meinem Programm zu tun...

Bzgl den Timern: Haltet ihr es sinnvoll einen timerManager einzubauen und eine eigene von TTimer abgeleitete Klasse zu implementieren. Wenn ich dann einen Timer davon erzeuge registriert sich der Timer dann automatisch beim TimerManager. Diese muss ich dann beim Schließen eben noch anweisen eben alle anzuhalten.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Exception beim Schließen ohne genauen Hintergrund

  Alt 5. Apr 2008, 18:54
Vielleicht hast du irgendwo ein Memoryoverlay verursacht. Überprüfe, ob du irgendwo über einen bestimmten Speicherbereich hinaus schreibst.

Beispiel 1:
Delphi-Quellcode:
var
  i: integer;
  arr: array of integer;
begin
  SetLength(arr, 10);
  for i := 0 to 20 do
    arr[i] := 0;
Beispiel 2:
Delphi-Quellcode:
var
  i: integer;
  mem: PByte;
begin
  GetMem(mem, 512);
  for i := 0 to 1024 do
  begin
    mem^ := 0;
    inc(mem);
  end;
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Exception beim Schließen ohne genauen Hintergrund

  Alt 5. Apr 2008, 19:15
Zitat von s.h.a.r.k:
Drücke ich F9
Drück doch mal F7, vielleicht bringt das etwas Licht in die Sache. Alternativ: vielleicht gibts die betreffende Form gar nicht mehr, weil im OnClose "Action: TCloseAction" auf caFree gesetzt wird?
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Exception beim Schließen ohne genauen Hintergrund

  Alt 5. Apr 2008, 19:18
Nutzt du irgendwelche speziellen Komponenten ?
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Exception beim Schließen ohne genauen Hintergrund

  Alt 5. Apr 2008, 20:58
Verwendest du selbstdefinierte Interfaces ?
Also etwa so:
  TMyObject = class(TPersistent, IMyLogging)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#9

Re: Exception beim Schließen ohne genauen Hintergrund

  Alt 8. Apr 2008, 08:39
Zitat von igel457:
Vielleicht hast du irgendwo ein Memoryoverlay verursacht. Überprüfe, ob du irgendwo über einen bestimmten Speicherbereich hinaus schreibst.
Das denke ich nicht, dass das der Fall ist, da ich da immer recht gut darauf aufpasse.

Zitat von Dani:
Drück doch mal F7, vielleicht bringt das etwas Licht in die Sache. Alternativ: vielleicht gibts die betreffende Form gar nicht mehr, weil im OnClose "Action: TCloseAction" auf caFree gesetzt wird?
Das hat mir auch nicht die versprochene Lösung bescheert, leider das mit dem caFree kann aber durchaus sein, da ich MDI-Forms habe und diese eben mit caFree freigebe. Muss ich mir mal näher anschauen! Danke für den Tipp.

Zitat von MrKnogge:
Nutzt du irgendwelche speziellen Komponenten ?
Die folgende Frage drängt sich hier auf: Was genau verstehst du unter "speziell"? Ich nutze Toolbar2000+TBX, VirtualDrawTree und AnyDAC 1.x für die Datenbankanbindung. Weiterer bin ich mir gerade nicht mehr bewusst. Es hat bisher ja alles funktioniert. Daher würde es mich überaus wundern, wenn es daran liegen sollte.

Zitat von sx2008:
Verwendest du selbstdefinierte Interfaces ?
Nein, Interfaces nutze ich gar nicht.


Resumée: Ich denke, dass es an den Timern liegt, werde es allerdings erst heute wieder genauer unter die Lupe nehmen können, d.h. ihr bekommt noch im Laufe des Tages ein Feedback darüber was, wann und wo schief gelaufen ist
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:13 Uhr.
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