[Gelöst] ShowModal bringt Rechner zum hängen
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
Re: ShowModal bringt Rechner zum hängen
Das geht. Alle Forms gehen. Nur in der Kombination
IrgendeineForm - IrgendeineAndereForm - FrmAdressAuswahlListe - NochEineForm
tritt das Problem bei NochEineForm auf.
Ich habe mal weiter versucht:
IrgendeineForm - IrgendeineAndereForm - NochEineForm - FrmAdresseBearbeiten
funktioniert. Demnach muss das Problem aus FrmAdressAuswahlListe kommen ...
Ich suche weiter.
IrgendeineForm - IrgendeineAndereForm - FrmAdressAuswahlListe - NochEineForm
tritt das Problem bei NochEineForm auf.
Ich habe mal weiter versucht:
IrgendeineForm - IrgendeineAndereForm - NochEineForm - FrmAdresseBearbeiten
funktioniert. Demnach muss das Problem aus FrmAdressAuswahlListe kommen ...
Ich suche weiter.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
Re: ShowModal bringt Rechner zum hängen
Verstehe ich richtig, dass der Hänger beim Arbeiten der Routine "BearbeiteAdresse" auftritt? In welcher Zeile? Wenn es, wie ich aufgrund anderer Posts weiter oben vermute, dann geschieht, wenn das Formular TfrmAdresse angezeigt wird, dann setze einfach an den Anfang jeder Methode von TfrmAdresse einen Breakpoint und finde heraus, wo genau in TfrmAdresse das Problem sitzt. Arbeite dich möglichst nahe an die auslösende Zeile herran und prüfe dabei den Inhalt aller Variablen. Du kannst auch unter "Hinzufügungen und Beeinflussungen eine benutzerdefinierte Option -gw2 setzen und kannst damit in den LCL-Code hineinsteppen (wobei ich nicht glaube, dass der Fehler in der LCL liegt, aber du könntest eine Idee kriegen, woran der Fehler liegt).
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
Re: ShowModal bringt Rechner zum hängen
Wo genau das Problem auftritt (Assemblermeldung und später der Hänger) steht alles schon weiter oben. (mein zweiter Post)
Ich habe auch schon durchgesteppt, Variablen geprüft usw. ich komme aber nicht wirklich weiter (Außer der Stelle wo es tatsächlich hängen bleibt).
Dort wird ein Fokus gesetzt. Das Feld auf den der Fokus soll ist auch vorhanden, jedoch wird die Form nicht angezeigt.
Und nochmal:
Es hängt die komplette Benutzeroberfläche, nicht nur das Programm. Ich kann nichts mehr anklicken, auch keine anderen Programme.
Dank Linux kann ich über TTY1 den Rechner neu starten oder auch versuchen (geht aber nicht) den Prozess abzuschießen.
Was das Anbinden in eine leere Form betrifft, so ist dies nicht so ohne weiteres möglich. Die Forms sind Teil eines sehr umfangreichem Projekts mit einer riesigen Datenbank und zahlreichen DataModules. Aber durch testweise Änderung der Reihenfolge konnte ich ja bereits erkennen, dass der Fehler nur auftritt, wenn aus der TfrmAdressListe eine weitere (beliebige) Form aufgerufen wird. Folglich muss sich - zumindest theoretisch - in TfrmAdressListe das Problem finden. Diese hat jedoch im wesentlichen nur zwei dbGrids und ein paar Buttons, verarbeitet wird hier absolut nichts.
Ich habe auch schon durchgesteppt, Variablen geprüft usw. ich komme aber nicht wirklich weiter (Außer der Stelle wo es tatsächlich hängen bleibt).
Dort wird ein Fokus gesetzt. Das Feld auf den der Fokus soll ist auch vorhanden, jedoch wird die Form nicht angezeigt.
Und nochmal:
Es hängt die komplette Benutzeroberfläche, nicht nur das Programm. Ich kann nichts mehr anklicken, auch keine anderen Programme.
Dank Linux kann ich über TTY1 den Rechner neu starten oder auch versuchen (geht aber nicht) den Prozess abzuschießen.
Was das Anbinden in eine leere Form betrifft, so ist dies nicht so ohne weiteres möglich. Die Forms sind Teil eines sehr umfangreichem Projekts mit einer riesigen Datenbank und zahlreichen DataModules. Aber durch testweise Änderung der Reihenfolge konnte ich ja bereits erkennen, dass der Fehler nur auftritt, wenn aus der TfrmAdressListe eine weitere (beliebige) Form aufgerufen wird. Folglich muss sich - zumindest theoretisch - in TfrmAdressListe das Problem finden. Diese hat jedoch im wesentlichen nur zwei dbGrids und ein paar Buttons, verarbeitet wird hier absolut nichts.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
Re: ShowModal bringt Rechner zum hängen
Bei ählichen Problemen hilft es mir, eine Projektkopie zu erstellen und diese solange zu reduzieren, bis nur noch das Problem sichtbar ist oder dieses sich auf dem Weg erklärt.
Hast du mal probiert Qt oder Qt5 als Widgetset zu verwenden? Sollte es tatsächlich ein LCL-GTK2-Problem sein, würde es dort vermutlich nicht auftreten.
Hast du mal probiert Qt oder Qt5 als Widgetset zu verwenden? Sollte es tatsächlich ein LCL-GTK2-Problem sein, würde es dort vermutlich nicht auftreten.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: ShowModal bringt Rechner zum hängen
du kannst es mit kill -9 versuchen, dass geht nur als root.Dank Linux kann ich über TTY1 den Rechner neu starten oder auch versuchen (geht aber nicht) den Prozess abzuschießen.
Komisch finde ich das, dass ganze System aufhängt.... Wann ist das Normalerweise der Fall? Ich kennen nur ein paar Beispiele:
1. Wenn du mit Threads arbeitest und irgendwie ein Fehler eingebaut hast.
2. Mit Multimedia Sachen wie z.b. mit der xineLib oder VLCLib.
3. Vielleicht auch mit dem TFrom.Handle stimmt was nicht?
Was kennt ihr für Beispiele? Ich denke, diese Antworten könnte zur Lösung das Problems beitragen.
Eine einfache Endlosschleife würde jetzt z.b. nicht das ganze System Aufhängen(Soweit ich weiß).
Hängt nur die UI oder das ganze System? Da du das TTY wechseln kannst, denke ich das nur die Oberfläche Hängt, d.h. du könntest lightdm neu Starten...
Ich würde versuchen ohne Debugger den Fehler zu finden...
Versuche in der Fraglichen Funktion z.b. vor jedem Befehl und nach jedem Befehl ein writeln zu schreiben oder versuche es in einer Log Datei zu schreiben.
Mit dieser art habe ich bisher so gut wie jeden Fehler finden können. Sogar Fehler, die nicht immer auftauchen...
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
Re: ShowModal bringt Rechner zum hängen
Threads verwende ich keine.
Ein Logfile schreibe ich, aber da ist alles OK. Der Fehler wird in die customform.inc verschleppt ...
Neue Erkenntnis - keine Ahnung ob es hilft. Ich habe versucht über OnFormActivate weiter zu kommen. Der Punkt wo das Programm stehen bleibt ist nun ein anderer:
In customform.inc in der Funktion TCustomForm.ShowModal:
FFocusedForm enthält die richtige Form.
- kill -9 hilft nicht
Ein Logfile schreibe ich, aber da ist alles OK. Der Fehler wird in die customform.inc verschleppt ...
Neue Erkenntnis - keine Ahnung ob es hilft. Ich habe versucht über OnFormActivate weiter zu kommen. Der Punkt wo das Programm stehen bleibt ist nun ein anderer:
In customform.inc in der Funktion TCustomForm.ShowModal:
FFocusedForm enthält die richtige Form.
Code: Alles auswählen
Application.ModalStarted;
try
Include(FFormState, fsModal);
if (PopupMode = pmNone) and HandleAllocated then
RecreateWnd(Self); // need to refresh handle for pmNone because ParentWindow changes if (fsModal in FFormState) - see GetRealPopupParent
ActiveWindow := GetActiveWindow;
SavedFocusState := SaveFocusState;
SavedCursor := Screen.Cursor;
Screen.FSaveFocusedList.Insert(0, Screen.FFocusedForm);
Screen.FFocusedForm := Self;
Screen.MoveFormToFocusFront(Self);
Screen.Cursor := crDefault;
ModalResult := 0;
try
if WidgetSet.GetLCLCapability(lcModalWindow) = LCL_CAPABILITY_NO then
DisabledList := Screen.DisableForms(Self)
else
DisabledList := nil;
Show;
try
// activate must happen after show
Perform(CM_ACTIVATE, 0, 0);
TWSCustomFormClass(WidgetSetClass).ShowModal(Self);
repeat
{ Delphi calls Application.HandleMessage
But HandleMessage processes all pending events and then calls idle,
which will wait for new messages. Under Win32 there is always a next
message, so it works there. The LCL is OS independent, and so it uses
a better way: }
try
WidgetSet.AppProcessMessages; // process all events <<<<<<<<<<<<< und ab hier geht nichts mehr!
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: ShowModal bringt Rechner zum hängen
dann ist es Heftig... wenn nicht mal -9 hilft.- kill -9 hilft nicht
Kannst du das Projekt nachbauen(Also nicht vollständig, ich meine nur, dass was Probleme macht)? und so vielleicht Isolierern? Ohne gleich das ganze Projekt zu Veröffentlichen?
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
Re: ShowModal bringt Rechner zum hängen
Ich habe jetzt mal in der aufrufenden Form (welche ich verdächtige) alles auskommentiert und von der DB getrennt - keine Änderung.
Das selbe anschließend mit der aufgerufenen Form - Fehler kommt trotzdem. (Aufrufende Form wieder original)
Dabei habe ich jeweils alle Datengebundenen Controls entfernt.
Hiermit wollte ich ausschließen, dass eventuell die Datenbank mir hier ein Bein stellt.
Ansonsten habe ich geprüft:
1. Alle Forms meines Projekts arbeiten unabhängig voneinander wie sie sollen.
2. Lediglich aus dieser einen aufrufenden Form kann ich keine weitere Form aufrufen - egal welche.
3. Aus jeder anderen Form kann ich weitere Forms aufrufen, egal wie tief das verschachtelt ist.
4. Der Aufruf passiert über Actions, welche in anderen Units gespeichert sind. D.h. egal von wo ich die Form (Action) aufrufe, es ist immer der selbe Befehl.
Da es sich hierbei um eine Komfortfunktion handelt welche nicht zwingend notwendig ist (aber sehr sinnvoll wäre), widme ich mich jetzt erst mal wieder den wichtigeren Sachen (Kundenauftrag, Zeitdruck).
Ich bleibe hier aber auf jeden Fall am Ball und möchte das auch irgendwann gelöst bekommen. Also falls noch jemand eine Idee hat - nur her damit.
Einstweilen bedanke ich mich für das bisher aufgebrauchte Hirnschmalz, die guten Hinweise und die tolle Hilfe - auch wenn es noch nicht zum Ziel führte.
Eventuell entferne ich die verdächtige Form(s) aus dem Projekt und erstelle diese neu - vielleicht hängt da auch irgendwo irgendwas unauffindliches, unheimliches (X-Akte)
Das selbe anschließend mit der aufgerufenen Form - Fehler kommt trotzdem. (Aufrufende Form wieder original)
Dabei habe ich jeweils alle Datengebundenen Controls entfernt.
Hiermit wollte ich ausschließen, dass eventuell die Datenbank mir hier ein Bein stellt.
Ansonsten habe ich geprüft:
1. Alle Forms meines Projekts arbeiten unabhängig voneinander wie sie sollen.
2. Lediglich aus dieser einen aufrufenden Form kann ich keine weitere Form aufrufen - egal welche.
3. Aus jeder anderen Form kann ich weitere Forms aufrufen, egal wie tief das verschachtelt ist.
4. Der Aufruf passiert über Actions, welche in anderen Units gespeichert sind. D.h. egal von wo ich die Form (Action) aufrufe, es ist immer der selbe Befehl.
Da es sich hierbei um eine Komfortfunktion handelt welche nicht zwingend notwendig ist (aber sehr sinnvoll wäre), widme ich mich jetzt erst mal wieder den wichtigeren Sachen (Kundenauftrag, Zeitdruck).
Ich bleibe hier aber auf jeden Fall am Ball und möchte das auch irgendwann gelöst bekommen. Also falls noch jemand eine Idee hat - nur her damit.
Einstweilen bedanke ich mich für das bisher aufgebrauchte Hirnschmalz, die guten Hinweise und die tolle Hilfe - auch wenn es noch nicht zum Ziel führte.
Eventuell entferne ich die verdächtige Form(s) aus dem Projekt und erstelle diese neu - vielleicht hängt da auch irgendwo irgendwas unauffindliches, unheimliches (X-Akte)
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: ShowModal bringt Rechner zum hängen
Du hast geschrieben, dass du alle Froms Dynamisch Erzeugst richtig? Gibt es denn eine LFM Datei?
Wenn, solltest du die mal genauer anschauen. Vielleicht steht da irgendwas drin. Z.B. ein Zeichen, was zu diesem Fehler führt, kam schon vor z.b. Bei "Apfel", wie man im Internet lesen konnte....
Wenn, solltest du die mal genauer anschauen. Vielleicht steht da irgendwas drin. Z.B. ein Zeichen, was zu diesem Fehler führt, kam schon vor z.b. Bei "Apfel", wie man im Internet lesen konnte....
MFG
Michael Springwald
Michael Springwald
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: ShowModal bringt Rechner zum hängen
Einen hätte ich noch: Das lfm in einem Texteditor öffnen und kontrollieren ob nicht unerwartet eine Eigenschaft des Forms geändert wird, die nur in diesem Form geändert wird. Zur Erinnerung, im lfm werden nur die Änderungen zur 'Default' gespeichert.MacWomble hat geschrieben:Eventuell entferne ich die verdächtige Form(s) aus dem Projekt und erstelle diese neu - vielleicht hängt da auch irgendwo irgendwas unauffindliches, unheimliches (X-Akte)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
Re: ShowModal bringt Rechner zum hängen
ja, in diese Richtung geht meine Vermutung auch so langsam. Ich finde einfach keine logische Erklärung.
Deswegen meinte ich ja, die Form(s) evtl. neu zu erstellen.
Nachtrag:
Die lfm-Files sehen normal aus. Keine auffälligen Änderungen gefunden ...
Deswegen meinte ich ja, die Form(s) evtl. neu zu erstellen.
Nachtrag:
Die lfm-Files sehen normal aus. Keine auffälligen Änderungen gefunden ...

Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: ShowModal bringt Rechner zum hängen
Es ging mir auch um Zeichen, die man normalerweise nicht sehen würde. Schau dir wenn möglich, die Datei mal im Hexeditor an.Die lfm-Files sehen normal aus. Keine auffälligen Änderungen gefunden ..
oder vielleicht wurde sie falsch codiert? Vergleich mal die Codierung von den einzeln LFM Dateien.
Klingt nach einem Spannenden Fehler...
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
Re: ShowModal bringt Rechner zum hängen
Na Ja, spannend finde ich das nicht wirklich 

Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: ShowModal bringt Rechner zum hängen
Ich finde viel mehr die Auswirkung Interessant. Das der ganze Fenster Manger unter Linux einfriert...Na Ja, spannend finde ich das nicht wirklich
Vielleicht werden die Messages irgendwie durcheinander gebracht...
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 9
- Registriert: Fr 13. Jun 2008, 15:23
- OS, Lazarus, FPC: Windows / Linux (FPC 3.2. fixes, Lazarus 3.0 fixes / trunk)
Re: ShowModal bringt Rechner zum hängen
Soweit ich mich erinnere, erzeugt das Setzen des Fokus auf ein Feld in einem nicht sichtbaren Form eine Exception, zumindest unter WIndows.MacWomble hat geschrieben:Wo genau das Problem auftritt (Assemblermeldung und später der Hänger) steht alles schon weiter oben. (mein zweiter Post)
Ich habe auch schon durchgesteppt, Variablen geprüft usw. ich komme aber nicht wirklich weiter (Außer der Stelle wo es tatsächlich hängen bleibt).
Dort wird ein Fokus gesetzt. Das Feld auf den der Fokus soll ist auch vorhanden, jedoch wird die Form nicht angezeigt.
Gruß Gerd