Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Hilfe! Die Delphi-IDE hängt sich beim beim Schließen auf. (https://www.delphipraxis.net/100038-hilfe-die-delphi-ide-haengt-sich-beim-beim-schliessen-auf.html)

Achim Kalwa 21. Sep 2007 12:43


Hilfe! Die Delphi-IDE hängt sich beim beim Schließen auf.
 
Hallo *

Ich stehe hier vor einem ungewöhnlichen Problem:

In meinem Delphi-Projekt befinden sich ca. 540 Units, und bei genau zweien davon spinnt die IDE:
Wenn ich diese Unit (enthält ein Form) in der IDE geöffnet habe und die Unit dann schließe -- auf welchem Weg ist dabei egal, z.B. File->Close -- dann hängt sich die Delphi IDE auf:

Der Inhalt des aktuellen Edit-Tabs verschwindet, aber der Editor-Tab bleibt sichtbar.
Die CPU-Last steigt auf 100%, es finden aber keinerlei Dateizugriffe statt (mit FileMon überprüft).
Es hilft dann nur das Abschießen des Tasks.

Der Fehler tritt jedoch nicht auf, wenn ich die gesamte IDE schließe/beende.

Der Code in der Unit ist syntaktisch Ok, er lässt sich ohne Fehler/Warnungen/Hinweise compilieren und macht zur Laufzeit auch genau das, was er soll. Ich kann im Editor ohne Probleme arbeiten, auch der Form-Designer funktioniert einwandfrei. Ebenso kann ich die geänderte Unit speichern, alles kein Problem.

Nur schließen kann ich die Unit nicht, sonst hängt sich Delphi auf. :-(

Das Problem ist nicht leider nicht neu; der Fehler tritt auf mit
- Delphi 7 Enterprise (Deutsch)
- Delphi 2007 Professional (English)

Was macht die IDE beim Schließen einer Unit? Wie kann ich das Problem eingrenzen?

Vielen Dank im Voraus für hoffentlich zahlreiche Tipps.

Achim

vsti 21. Sep 2007 13:16

Re: Hilfe! Die Delphi-IDE hängt sich beim beim Schließen auf
 
Das kommt mir irgendwie sehr bekannt vor...

Grade bei großen Projekten (bei uns weit über 500 Units) und Units, die mit vielen anderen Units untereinenader verknüpft sind, habe ich bei Delphi 2005 REGELMÄßIG Hänger von mehreren Minuten, ehe sie die IDE erholt hat oder eben ganz und gar aufgibt. Allerdings war das bei Delphi 7 noch nicht so, erst nachdem bei uns Delphi 2005 ins Haus flatterte.
Ich vermute es hängt damit zusammen, dass bei den Units die in den Uses untereinander verknüpft sind noch irgendwelche Prüfungen statt finden ehe diese geschlossen werden kann. Und ich vermute mal, wenn du lange genug wartest würde sich die IDE evtl. wieder erholen. Ich orientiere mich immer an der CPU- und Speicherauslastung. Wenn CPU auf 99 Prozent ist, aber die Speicherauslastung sich noch ändert, heißt, dass das da noch was passiert und ich nur Geduld haben muss. Wenn der Speicher auch statisch bleibt, kannst den Prozess abschießen. Wie ist es denn bei dir?

RavenIV 21. Sep 2007 13:19

Re: Hilfe! Die Delphi-IDE hängt sich beim beim Schließen auf
 
Ich würde so vorgehen.

Eine neue Unit erzeugen.
Den Code der "bösen" Unit in die neue komplett kopieren.
Dann den Inhalt des "bösen" Forms auf das neue Form kopieren.
Die "böse" Unit umbenennen und die neue mit dem gleichen Namen benennen.

Vielleicht ist irgendwo ein komischer Zeilenumbruch, oder am Ende der Unit ist iegendein flasches Zeichen oder im Formular ist irgendwas von Löschen übriggeblieben.

Ich hatte den Fall nämlich auch mal, dass sich die IDE beim Öffnen einer Unit aufgehängt hat.
Da hab ich das obige Vorgehen benutzt und es hat geholfen.
Beim anschliessenden Vergleichen mit ExamDiff hat sich herausgestellt, dass in der kaputten Unit in einer Zeile ein ^M versteckt hatte. Der Delphi-Editor hat dies nicht angezeigt, der Dateibetrachter von ExamDiff jedoch schon.

Achim Kalwa 21. Sep 2007 13:22

Re: Hilfe! Die Delphi-IDE hängt sich beim beim Schließen auf
 
Hallo Leidensgenosse!

Zitat:

Zitat von vsti
Und ich vermute mal, wenn du lange genug wartest würde sich die IDE evtl. wieder erholen. Ich orientiere mich immer an der CPU- und Speicherauslastung. Wenn CPU auf 99 Prozent ist, aber die Speicherauslastung sich noch ändert, heißt, dass das da noch was passiert und ich nur Geduld haben muss. Wenn der Speicher auch statisch bleibt, kannst den Prozess abschießen. Wie ist es denn bei dir?

Ich habe der IDE schon mal 3 Stunden Wartezeit gegönnt; ohne Erfolg. Die Speicherauslastung bleibt unverändert; keine Dateizugriffe, nix.

Gerade habe ich eine der beiden betroffenen Units in ein anderes Verzeichnis kopiert und ein neues Projekt drumherum erstellt. Das lässt sich zwar nicht compilieren, weil jede Menge anderer benötigter Units fehlen, aber der Fehler beim Schließen der Unit tritt trotzdem auf :-)

Da werde ich mal weiter testen...

Achim

SirThornberry 21. Sep 2007 13:26

Re: Hilfe! Die Delphi-IDE hängt sich beim beim Schließen auf
 
für mich klingt das eher nach einer fehlerhaften Komponente welche durch die Integration in der IDE auch erzeugt und frei gegeben wird. Ist im Quelltext des Freigebens jetzt irgendwo ein Hänger oder eine Endlosschleife hängt natürlich auch die IDE.

Achim Kalwa 21. Sep 2007 13:29

Re: Hilfe! Die Delphi-IDE hängt sich beim beim Schließen auf
 
Hallo,

Zitat:

Zitat von RavenIV
Eine neue Unit erzeugen.
Den Code der "bösen" Unit in die neue komplett kopieren.
Dann den Inhalt des "bösen" Forms auf das neue Form kopieren.
Die "böse" Unit umbenennen und die neue mit dem gleichen Namen benennen.

gerade ausprobiert:
Der Fehler wandert mit. D.h. auch beim Schließen der neuen Unit mit dem kopierten Code/Form tritt der Fehler auf :-(

RavenIV 21. Sep 2007 13:31

Re: Hilfe! Die Delphi-IDE hängt sich beim beim Schließen auf
 
Zitat:

Zitat von kalwados
gerade ausprobiert:
Der Fehler wandert mit. D.h. auch beim Schließen der neuen Unit mit dem kopierten Code/Form tritt der Fehler auf :-(

Versuch mal, die .pas und die .dfm im Windows-Texteditor zu öffnen und wieder zu speichern.
Der kann nämlich keine Sonderzeichen lesen und schreiben.

bernau 21. Sep 2007 13:43

Re: Hilfe! Die Delphi-IDE hängt sich beim beim Schließen auf
 
Den Fehler hatte ich vor ein paar Monaten, als ich von Delphi5 auf BDS2006 umgestiegen bin. Es lag an einer fehlerhaften Komponente.

Ich konnte auch eine Form bestimmen, die beim Schliessen den Hänger verursacht hat.

Ich habe es so gelöst: Alle Komponenten, die auf der Form vorhanden sind merken. Dann eine Dummyform erzeugen und nacheinander die betreffenden Komponenten auf das Form setzten. Nach jeder Komponente die Form speichern schliessen und wieder öffnen. Wenn Delphi beim Schliessen der Form einfriert, kennst du die Komponente, die den Fehler verursacht hat.

Ich bin den Fehler umgangen, indem ich die Komponente von der entsprechenden Form entfernt habe un diese im OnCreate manuell instanziert habe.


Gerd

Achim Kalwa 21. Sep 2007 14:09

Re: Hilfe! Die Delphi-IDE hängt sich beim beim Schließen auf
 
Hallo,

Zitat:

Zitat von SirThornberry
für mich klingt das eher nach einer fehlerhaften Komponente welche durch die Integration in der IDE auch erzeugt und frei gegeben wird. Ist im Quelltext des Freigebens jetzt irgendwo ein Hänger oder eine Endlosschleife hängt natürlich auch die IDE.

Ja, so langsam glaube ich auch an eine fehlerhafte Komponente.
Vermutlich habe ich sie gerade identifiziert...

(10 Minuten später...)

Ich hab's gefunden :-)

Delphi-Quellcode:
procedure TCustomDataExport.Notification(AComponent: TComponent; Operation: TOperation);
begin
  if (Operation = opRemove) then begin
    if (Assigned(FDataset)) and (AComponent = FDataset)
    then begin
      FDataset := nil;
    end;

    if (AComponent is TDBGrid) and (TDBGrid(AComponent).SelectedRows = FBookmarkList)
    then begin
      FBookmarkList := nil;
    end;
  end;
end;
Na, wer sieht den Fehler?

Achim

Achim Kalwa 21. Sep 2007 14:23

Re: Hilfe! Die Delphi-IDE hängt sich beim beim Schließen auf
 
Zitat:

Zitat von kalwados
Na, wer sieht den Fehler?

Ok, ich werde Euch nicht länger auf die Folter spannen. Es handelt sich (natürlich) um eine selbst geschriebene Komponente. Im oben gezeigten Code fehlt eine Zeile mit folgendem Code:
Delphi-Quellcode:
inherited;
Danke für's lesen :-)

Achim


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 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