AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StyleManger verursacht Stack Overflow

Ein Thema von RayEn · begonnen am 12. Aug 2022 · letzter Beitrag vom 7. Sep 2022
Antwort Antwort
RayEn

Registriert seit: 18. Aug 2010
8 Beiträge
 
Delphi 11 Alexandria
 
#1

StyleManger verursacht Stack Overflow

  Alt 12. Aug 2022, 14:12
Hallo,

keine Ahnung was ich an meinem Programm verbockt habe.

Wenn ich beim Starten des Programmes einen neuen Style anwende z.B. TStyleManager.TrySetStyle('Sky')
dann funktioniert das wunderbar. Rufe ich den StyleManger während der Laufzeit nocheinmal auf, um einen andren Style zu setzen,
bekomme ich einen Stackoverflow in system.pas in _CallDynaInst.

Ich weiß, dass das Ganze schon einmal funktioniert hat, ich habe nur keine Ahnung was ich seitdem geändert habe, das so ein Verhalten provozieren könnte.
Der Rest der Applikation läuft unauffällig einzig dieser Funktionsaufruf scheitert. Ein Aufruf mit demselben Style wie bein Create klappt.
Wenn ich den anderen Style direkt beim Create einstelle klappt das auch, nur ein Wechsel verursacht dann einen Stack Overflow.
Vielleicht hat ja von euch jemand eine Idee, wo ich zum Suchen anfangen kann.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.646 Beiträge
 
Delphi 12 Athens
 
#2

AW: StyleManger verursacht Stack Overflow

  Alt 12. Aug 2022, 15:30
Das hat nicht zufällig was mit der in deinem anderen Thread geschilderten Problem bzw. dessen Lösung zu tun?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
RayEn

Registriert seit: 18. Aug 2010
8 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: StyleManger verursacht Stack Overflow

  Alt 12. Aug 2022, 15:49
Hallo,
ja das war auch mein erster Verdacht, aber nach einem 'Rückbau' der Änderungen, bleibt das Fehlerbild erhalten.

Was ich noch viel bemerkenswerter finde - wenn ich in Create die Funktion nacheinander mit verschiedenen Styles aufrufe passiert nichts.
Aber sobald ich den Aufruf aus dem laufenden Programm mache kracht es.

Also habe ich testweise den kompletten Code in Create rauskommentiert um auszuschliessen, dass da etwas schief läuft - gleiches Bild.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.376 Beiträge
 
Delphi 12 Athens
 
#4

AW: StyleManger verursacht Stack Overflow

  Alt 12. Aug 2022, 16:25
Im Create ist die Form noch unsichtbar.
Später sichtbar.

Also entweder liegt es an einer Komponente, die bereits gezeichnet wurde und nun da etwas schief steht,
oder es liegt an einem Ereignis, worauf nur sichtbare Komponenten reagieren. (also im Create hätte es auch geknallt, wäre die Form bereits sichtbar gewesen)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
RayEn

Registriert seit: 18. Aug 2010
8 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: StyleManger verursacht Stack Overflow

  Alt 12. Aug 2022, 16:36
Im Create ist die Form noch unsichtbar.
Später sichtbar.

Also entweder liegt es an einer Komponente, die bereits gezeichnet wurde und nun da etwas schief steht,
oder es liegt an einem Ereignis, worauf nur sichtbare Komponenten reagieren. (also im Create hätte es auch geknallt, wäre die Form bereits sichtbar gewesen)
Ja klingt logisch - da der Überlauf anscheinend erst beim updaten auftritt - die Funktion TrySetStyle selbst wird ohne Fehler beendet - muss ich wohl mal sukzessive Elemente entfernen um den Übeltäter zu finden.
Oder gibt es eine Routine, wo ich mir sinnvoll einen Breakpoint setzen kann, um zu sehen, welche Komponenten gerade aktuallisiert werden?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.376 Beiträge
 
Delphi 12 Athens
 
#6

AW: StyleManger verursacht Stack Overflow

  Alt 12. Aug 2022, 17:24
Nja, blöd ist ja, dass der Stacktrace vorzeitig abbricht (ein Limit) und man bei einem Stacküberlauf dann nur sieht wo es in der Schleife läuft, aber da wo die Schleife anfing, das bleibt im Dunklen.

Dass es einen Bruch gibt, ist ja OK, aber hier wäre es nett, wenn Emba uns dennoch einen "Alles laden"-Knopf geben würde.
(oder wenn man in der Mitte nach x Einträgen alles weg läßt und dann den Anfang auch noch anzeigt)

Man könnte den zwar den Stackspeicher verrigern ... so klein, damit der Abbruch früher kommt und der Stack noch bis zum Anfang ausgelesen wird .... aber neeeee.



Nja, du siehst ja wo es in der Schleife fest hängt ... da macht man an einen der wiederholenden Stellen einen Haltepunkt.
In CPU-Ansicht oder besser im Code, wenn es das gibt, weil die DLL ja beim nächsten Start wo anders liegen könnte.

Dann neu starten, hoffen, die gewählte Stelle erst beim Überlauf durchlaufen wird.
Ergebnis man ist am Anfang des Überlaufs und sieht daher noch was vorher im Stack steht, also wer für den Überlauf verantworklich ist.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz