Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Programm bleibt sporadisch und undefineirt hängen (https://www.delphipraxis.net/215446-programm-bleibt-sporadisch-und-undefineirt-haengen.html)

Rainer Wolff 3. Jul 2024 13:45

Delphi-Version: 10.4 Sydney

Programm bleibt sporadisch und undefineirt hängen
 
Anwendungsbeschreibung: 3 PC sind über OPC mit einer SPS verbunden (Anlagenvisualisierung). Wenn ein Produkt gefertigt bzw. behandelt wird, werden die Daten in eine Firebird-DB (4.04) geschrieben. Hier geht es nach dem Prinzip: Der schnellere siegt und macht die DB-Änderung, die anderen bekommen eine primary key violation oder auch einen Deadlock und machen dann ein Rollback. Dadurch erreiche ich eine gewisse Redundanz, wenn ein Rechner ausfällt oder hängt.

Nach einer gewissen Laufzeit, die durchaus Stunden dauern kann, aber auch mal nach 1/4 oder 1/2 Stunde, hängt die Anwendung, es gibt nur noch die Eieruhr und dann die Meldung App reagiert nicht mehr. Oftmals in Zusammenhang mit einer Bedieneraktion, aber auch ohne Interaktion.

Memoryleaks habe ich untersucht und beseitigt, ebenfalls habe ich inzwischen noch den Speicherverbrauch bei laufender Applikation angeschaut, da tut sich ebenfalls nichts auffaelliges.

Aktuell habe ich keine Idee, wo ich jetzt weiter ansetzen kann.

himitsu 3. Jul 2024 13:53

AW: Programm bleibt sporadisch und undefineirt hängen
 
Debugger (RemoteDebugging)
ProcessExplorer
Taskmanager->Snapshot und später mit'm WindowsDebugger ansehn
...

Halt den Stack ansehn, und hoffen man erkennt, wo es hängt :zwinker:

TomyN 3. Jul 2024 15:07

AW: Programm bleibt sporadisch und undefineirt hängen
 
Aus dem Bauch raus: Fehlende Freigabe der Datenbank nach erfolgreichem Schreiben, oder einer der 'ausgebremsten' PCs blockiert aus Trotz die Datenbank.

Der schöne Günther 3. Jul 2024 16:20

AW: Programm bleibt sporadisch und undefineirt hängen
 
OPC oder OPC UA? Grade bei letzterem könntest du dir doch eine simulierte Gegenseite bauen um zu prüfen, wie sich deine Anwendung verhält wenn die SPS z.B. nicht mehr antwortet, oder nur stark verzögert oder halt einen Fehlercode zurückgibt.

Ich finde meinen Quelltext leider nicht mehr, aber ich hatte auch einmal einen "Watchdog-Thread" welcher den MainThread alle 500ms mit einer Windows-Message angepingt hat, und wenn er nicht schnell genug eine Antwort bekam hat er den Stack des Hauptthreads ausgelesen und auf die Platte geloggt.
Ich wüsste spontan nicht mehr, wie man auf den Stack eines anderen Threads herankommt, aber dann könntest du auch ohne Live-Debugging immerhin beim Kunden protokollieren, dass etwas hängt, und wo.

jaenicke 3. Jul 2024 17:57

AW: Programm bleibt sporadisch und undefineirt hängen
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1538560)
Ich finde meinen Quelltext leider nicht mehr, aber ich hatte auch einmal einen "Watchdog-Thread" welcher den MainThread alle 500ms mit einer Windows-Message angepingt hat, und wenn er nicht schnell genug eine Antwort bekam hat er den Stack des Hauptthreads ausgelesen und auf die Platte geloggt.

Das können Eurekalog und madExcept beide.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:07 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 by Thomas Breitkreuz