AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Zugriffsverletzung bei Programmende (nicht nachvollziehbar)
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffsverletzung bei Programmende (nicht nachvollziehbar)

Ein Thema von Peter Mössinger · begonnen am 21. Jan 2006 · letzter Beitrag vom 22. Jan 2006
Antwort Antwort
Seite 1 von 2  1 2      
Peter Mössinger

Registriert seit: 26. Jul 2005
Ort: Mainz
31 Beiträge
 
Delphi 7 Professional
 
#1

Zugriffsverletzung bei Programmende (nicht nachvollziehbar)

  Alt 21. Jan 2006, 15:28
Hallo,

seit etlichen Jahren (Delphi 1) arbeite ich an einem größeren Programm, das auch hervorragend läuft und immer weiter wächst und gedeit. Wenn ich einen kompletten Build mache komme ich intwischen auf 239000 Zeilen (nicht alle von mir).

So weit so gut. Wenn ich das Programm aus der IDE heraus starte klappt alles prima. Wenn ich es aber stand-alone starte kommte es beim Beenden hin und wieder zu Zugriffsverletzungen. Meist sind es etwa 10 Stück. Da sie NIE in der IDE auftreten weiß ich nicht wie ich sie debuggen soll. Mir ist klar, dass hier wahrscheinlich Speicher aufgeräumt wird, den ich schon deallokiert habe, aber wie kann ich herausfinden welcher?

Das Problem ist, dass der Fehler nicht nachvollziehbar ist. Ich öffne das Programm, gehe in ein oder zwei Dialoge, beende das Programm und dann tritt der Fehler manchmal auf und manchmal nicht. Dann kann es sein, dass bei mir alles klappt und dass dann einer meiner User nach der Installation (Inno Setup) trotzdem die Zugriffsverletzungen bekommt. Hin und wieder denke ich sogar, dass es am Build hängt, denn wenn ich nach einen "fehlerhaften" Build das Programm nochmal baue ist der Fehler zumindest bei mir oft weg (ich sollte die Builds wirklich mal vergleichen).

Gibt es irgendwelche Tools um dieses hartnäckige Probem zu lösen? Habt Ihr sonst irgendwelche kreativen Ideen? Habt Ihr ein solches Problem mal selbst gehabt?

Peter
Peter Mössinger
Tischtennis-Ergebnisdienst des RTTV (Rheinhessischen TT Verbandes)
http://ergebnisdienst.rttv.de
Delphi + Kylix!!
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Zugriffsverletzung bei Programmende (nicht nachvollziehb

  Alt 21. Jan 2006, 15:30
Hi,

Hantierst Du irgendwo vielleicht mit Zeigern, die Fehler auslösen könnten?
Verwendest Du Threads, die evtl. nicht beendet werden?

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Zugriffsverletzung bei Programmende (nicht nachvollziehb

  Alt 21. Jan 2006, 15:32
Wenn der Fehler, außeer der Tatsache, dass er eben kommt, nichts ausmacht, kannst du ihn ja (uneleganterweise ) mit try-except unterdrücken.

sonst kannst du noch mit showmessages debuggen, die immer die aktuelle Position anzeigen.
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Zugriffsverletzung bei Programmende (nicht nachvollziehb

  Alt 21. Jan 2006, 15:32
Moin Peter,

in solchen Fällen könnten MemProof und/oder Bei Google suchenMadExcept helfen.
Speziell MadExcept wäre hier wohl hilfreich, da Dir bei einem Fehler i.d.R. der gesamte CallStack mit angezeigt wird.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Peter Mössinger

Registriert seit: 26. Jul 2005
Ort: Mainz
31 Beiträge
 
Delphi 7 Professional
 
#5

Re: Zugriffsverletzung bei Programmende (nicht nachvollziehb

  Alt 21. Jan 2006, 15:37
Hi,

natürlich benutze ich Zeiger, Threads sind dann keine mehr offen (bestimmt). Ich kann aber ziemlich sicher ausschliessen, dass Zeiger mein Problem sind. Wie gesagt. Zehnmal das Programm gestartet, das selbe gemacht und fünfmal Fehler und fünfmal nicht.
Kann es hier in Windows zu Unterschieden kommen?

Wie kann ich Zugriffsverletzungen am Ende des Programms debuggen? Sie treten nach meiner letzten Programmzeile auf.

Sorry, muss jetzt weg. Kann erst heute abend wieder antworten.
Peter Mössinger
Tischtennis-Ergebnisdienst des RTTV (Rheinhessischen TT Verbandes)
http://ergebnisdienst.rttv.de
Delphi + Kylix!!
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Zugriffsverletzung bei Programmende (nicht nachvollziehb

  Alt 21. Jan 2006, 15:49
Ein beliebter Auslöser für solche Effekte ist es auch, wenn man hier und da mal Array-Grenzen überschreitet. Um das herauszufinden einfach mal die Bereichsprüfung anknpisen. (Solltest du allerdings C-Like simulierte dynamische Arrays ala "array[0..0] of xxx" mit GetMem und Zeigerarithmetik verwenden, so hilft die Bereichsprüfung nicht wirklich.)

Auch beliebt ist das manuelle Freigeben von automatisch erzeugen Formularen (bzw. Komponenten), die beim Beenden nochmals freigegeben werden. Danach u.U. auch mal Ausschau halten.

Dass die Exceptions innerhalb der IDE nicht auftauchen, könnte daran liegen, dass du dies abgeschaltet hast. Mal in die Debugger-Optionen schauen.

Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Zugriffsverletzung bei Programmende (nicht nachvollziehb

  Alt 21. Jan 2006, 16:29
Ich hatte auch schon solche Fehler , und mir hat MemCheck (freeware) sehr geholfen!
Findet man schnell über google.

Kann ich wirklich empfehlen. Die IDE merkt es nicht immer wenn man mal was 2x freigibt.

Viel Erfolg.

Thomas
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Zugriffsverletzung bei Programmende (nicht nachvollziehb

  Alt 22. Jan 2006, 01:06
Moin Peter,

Zitat von Peter Mössinger:
Wie kann ich Zugriffsverletzungen am Ende des Programms debuggen? Sie treten nach meiner letzten Programmzeile auf.
dass schon, aber die Ursache liegt mit Sicherheit in Deinen Programmzeilen
Da können Dir die schon genannten Tools helfen.

Wenn Du das Projekt mit Debug DCUs kompilierst kannst Du u.U. auch nach Deiner letzten Zeile debuggen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Peter Mössinger

Registriert seit: 26. Jul 2005
Ort: Mainz
31 Beiträge
 
Delphi 7 Professional
 
#9

Re: Zugriffsverletzung bei Programmende (nicht nachvollziehb

  Alt 22. Jan 2006, 02:30
Dank MadExcept weiss ich jetzt, dass die Exception in der Procedure DoneControls in der Controls.pas passiert und zwar bei:

Delphi-Quellcode:
  Application.Free; <---
  ...
http://www.rttv.de/ergebnisdienst/fehler.jpg



Ich bin mir sehr sicher, dass ich das Application Objekt nicht selbst anrühre. Was passiert hier? Bin jetzt fast noch ratloser. Hat das was mit irgendwelchen Popup-Menüs oder dem Hauptmenü zu tun?
Peter Mössinger
Tischtennis-Ergebnisdienst des RTTV (Rheinhessischen TT Verbandes)
http://ergebnisdienst.rttv.de
Delphi + Kylix!!
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Zugriffsverletzung bei Programmende (nicht nachvollziehb

  Alt 22. Jan 2006, 11:50
Hallo Peter,

das Application Objekt versucht alles was ihm "gehört" wegzuräumen, aber es scheint etwas schon vorher weggeräumt worden zu sein.

Hast Du irgendwelche Komponenten manuell erstellt - also nicht auf das Formular plaziert, sondern mit create selbst erzeugt ?

Wenn ja kommt es drauf an ob Du die Owner und Parent Eigenschaften korrekt gesetzt hast. Owner solltest Du auf NIL setzen und dann die Komponente selber freigeben. Parent muss manuell auf z.B das Form gesetzt werden, damit die Komponente korrekt gezeichnet werden kann.

z.B.

Delphi-Quellcode:

procedure TForm1.OnCreate;
begin
  myButton := tButton.Create(nil);
  myButton.Parent := Self;
  ...
end;

procedure TForm1.OnDestroy;
begin
  myButton.Free;
end;
Gruss
Thomas
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:38 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