[Gelöst] ShowModal bringt Rechner zum hängen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
MacWomble
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

Beitrag von MacWomble »

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.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: ShowModal bringt Rechner zum hängen

Beitrag von wp_xyz »

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).

MacWomble
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

Beitrag von MacWomble »

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.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: ShowModal bringt Rechner zum hängen

Beitrag von Michl »

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.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

pluto
Lazarusforum e. V.
Beiträge: 7178
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

Beitrag von pluto »

Dank Linux kann ich über TTY1 den Rechner neu starten oder auch versuchen (geht aber nicht) den Prozess abzuschießen.

du kannst es mit kill -9 versuchen, dass geht nur als root.

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

MacWomble
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

Beitrag von MacWomble »

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.

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!
 


- kill -9 hilft nicht
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

pluto
Lazarusforum e. V.
Beiträge: 7178
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

Beitrag von pluto »

- kill -9 hilft nicht

dann ist es Heftig... wenn nicht mal -9 hilft.
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

MacWomble
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

Beitrag von MacWomble »

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)
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

pluto
Lazarusforum e. V.
Beiträge: 7178
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

Beitrag von pluto »

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....
MFG
Michael Springwald

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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

Beitrag von af0815 »

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)

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.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MacWomble
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

Beitrag von MacWomble »

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 ... :(
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

pluto
Lazarusforum e. V.
Beiträge: 7178
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

Beitrag von pluto »

Die lfm-Files sehen normal aus. Keine auffälligen Änderungen gefunden ..

Es ging mir auch um Zeichen, die man normalerweise nicht sehen würde. Schau dir wenn möglich, die Datei mal im Hexeditor an.
oder vielleicht wurde sie falsch codiert? Vergleich mal die Codierung von den einzeln LFM Dateien.

Klingt nach einem Spannenden Fehler...
MFG
Michael Springwald

MacWomble
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

Beitrag von MacWomble »

Na Ja, spannend finde ich das nicht wirklich :shock:
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

pluto
Lazarusforum e. V.
Beiträge: 7178
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

Beitrag von pluto »

Na Ja, spannend finde ich das nicht wirklich

Ich finde viel mehr die Auswirkung Interessant. Das der ganze Fenster Manger unter Linux einfriert...

Vielleicht werden die Messages irgendwie durcheinander gebracht...
MFG
Michael Springwald

gsa
Beiträge: 9
Registriert: Fr 13. Jun 2008, 15:23
OS, Lazarus, FPC: Windows / Linux (FPC 3.2. fixes, Lazarus 2.0 fixes / trunk)

Re: ShowModal bringt Rechner zum hängen

Beitrag von gsa »

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.


Soweit ich mich erinnere, erzeugt das Setzen des Fokus auf ein Feld in einem nicht sichtbaren Form eine Exception, zumindest unter WIndows.

Gruß Gerd

Antworten