AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Fehler beim Programm beenden
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler beim Programm beenden

Ein Thema von Jens Hartmann · begonnen am 19. Okt 2015 · letzter Beitrag vom 15. Nov 2015
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#1

Fehler beim Programm beenden

  Alt 19. Okt 2015, 20:53
Hallo zusammen,

seid ein paar Tagen, bringt mein Programm beim schliessen der Anwendung einen seltsamen Fehler. Dieser tritt aber auch nicht immer auf. Siehe Bild im Anhang. Ich vermute, dass diese irgendwo damit zu tun hat, das ich beim beenden auf ein Objekt zugreifen will, welches es nicht mehr gibt. Das Problem allerdings ist, wie kann ich das finden.

Ich habe in der Projektdatein aktuell folgenden Code eingefügt und bekomme beim beenden die Fehlermeldung (siehe Bild 2)

Delphi-Quellcode:
    
{$IFDEF DEBUG}
ReportMemoryLeaksOnShutdown := True;
{$ENDIF}
Kann mir jemand eine Hilfestellung geben, wie ich das Problem auffinden kann?
Miniaturansicht angehängter Grafiken
bild1.jpg   bild2.jpg  
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Fehler beim Programm beenden

  Alt 19. Okt 2015, 21:08
Bekommst du den MemoryLeak Report auch ohne die Zugriffsverletzung (AV)?

Wenn nein, dann folgt daraus, dass nach der AV eigentlich noch Objekte wären, die hätten freigegeben werden müssen. Die AV sorgt aber dafür, dass das Programm abbricht. Am besten kannst du den Fehler mit dem Debugger finden. Damit trotz AV Objekte freigegeben werden gibt es try .. finally .. end;

Wenn ja, dann haben die MemoryLeaks nichts mit der AV gemeinsam.


Bevor du mit dem Debugger arbeitest solltest du in den Projektoptionen Debug diverse Optionen wie Optimierung ausschalten. Dadurch wird dein Programm beim Debugger langsamer, aber du kannst dir noch Variablen ansehen, die der Compiler sonst schon wieder aus dem LX verworfen hätte.

Versuch einfach mal direkt wenn die AV kommt auf Anhalten zu klicken. Im IDE Fenster Call Stack bekommst eine Liste der Aufrufe, die zu diesem Fehler geführt haben (Ausführungsablauf). Daran kannst du dich nach oben entlanghangeln.

Vielleicht hilft dir dies schon weiter
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Fehler beim Programm beenden

  Alt 19. Okt 2015, 22:25
Andere Theorie: Du gibst Objekte frei die automatisch erzeugt werden und eigentlich auch automatisch wieder frei gegeben werden, aber da du sie schon frei gibst... Oder du gibts was frei, was schon freigegeben ist. Greifst auf schon freigegeben Objekte zu. Überpürf das alles mal.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Fehler beim Programm beenden

  Alt 19. Okt 2015, 22:41
Ich glaube, dass das ganze mit der Komponente VirtualStringTree zu tun hat. In der OnCloseQuery gebe ich das VST frei und irgendwie habe ich die Vermutung, das der Fehler dabei auftreten tut.
Nach der Fehlermeldung ist der VST nicht mehr sichtbar und die Anwendung ansonsten noch offen. Außerdem verwende ich in der VST Objekte.
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Fehler beim Programm beenden

  Alt 19. Okt 2015, 23:08
Erstellt du ihn auch "von Hand" im Code?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Fehler beim Programm beenden

  Alt 19. Okt 2015, 23:52
Nein, liegt als Komponenten auf der Form...
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Fehler beim Programm beenden

  Alt 20. Okt 2015, 00:28
Und warum gibst du ihn dann selbst frei?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#8

AW: Fehler beim Programm beenden

  Alt 20. Okt 2015, 06:21
Ich glaube, dass das ganze mit der Komponente VirtualStringTree zu tun hat. In der OnCloseQuery gebe ich das VST frei und irgendwie habe ich die Vermutung, das der Fehler dabei auftreten tut. Nach der Fehlermeldung ist der VST nicht mehr sichtbar und die Anwendung ansonsten noch offen. Außerdem verwende ich in der VST Objekte.
Wenn du den VirtualStringTree (VST) nicht selbst erzeugst, darfst du ihn auch nicht selbst freigeben. Legst du einen VST auf die Form, erhält dieser automatisch die Form als Eigentümer (Owner) und wird somit automatisch freigegeben, wenn die Form freigegeben wird. Mit irgendwelchen Objekten, die du dem VST zuweist, ist es ähnlich: Du mußt feststellen, ob diese Objekte beim Zerstören des VST ebenfalls zerstört werden und wenn nicht, diese Objekte zuerst freigeben.

Im Übrigen sollte man Freigaben niemals im OnCloseQuery machen, sondern immer im OnDestroy, weil erst im OnDestroy sichergestellt ist, daß die Zerstörung nun wirklich begonnen hat und auch durchgeführt wird. So könnte im OnClose, das nach OnCloseQuery aufgerufen wird (wenn CanClose = True), auch etwas anderes als das caFree vereinbart werden oder worden sein; der Standard-Wert ist nämlich caHide. Nur wenn die zu schließende Form auch die Mainform ist, wird bei OnClose automatisch caFree aufgerufen.

Um genau herauszufinden, wo diese ominösen Memory-Leaks entstehen, wäre es zielführend, das Programm-Ende ein- oder mehrmals sorgfältig durchzusteppen. Beim letzten meiner Kunden, der dieses Problem hatte, wurde in seiner vollkommen undurchschaubaren Anwendung mehrfach OnClose oder OnDestroy aufgerufen, was sich natürlich fatal auf die saubere Beendigung des Programms auswirkt. Oft werden bei älteren Anwendungen auch massenweise Hinweise und Warnungen mitgeschleppt und ignoriert (besagter Kunde erzeugte bei jedem Kompilierungsvorgang mehrere Hundert!). Da muß man sich einfach die Zeit nehmen, das einmal in aller Ruhe zu bereinigen. Häufig erledigen sich dadurch bereits zahlreiche Fehlerquellen, vor allem beim Beheben von Warnungen über nicht initialisierte Variablen.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#9

AW: Fehler beim Programm beenden

  Alt 20. Okt 2015, 07:44
Die Memoryleaks kommen vom vorzeitigen Abbruch der Anwendung, jede Wette. Na ja. Fast jede.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#10

AW: Fehler beim Programm beenden

  Alt 20. Okt 2015, 08:34
Danke schon mal zusammen, werde das heute Abend mal anpassen.

Das ich eine VST normal nicht freigeben muss (wenn es auf der Form liegt), war mir eigentlich klar, allerdings meine ich mich daran errinnern zu können, das ich das vor einiger Zeit mal eingebaut habe, weil ein ähnliches Problem vorhanden war und das Problem mit dem VST.free erledigt war.

Hat mich damals schon gewundert. Ich werde heute mal alle Warnungen versuchen zu beseitigen und schauen das alle Objekte zum passenden Zeitpunkt freigegeben werden. Die Freigabe vom VST nehme ich wieder raus.

Dann schaun war mal

Danke und Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 16:50 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