Die IDE ist ja mittlerweile sehr gut vorangeschritten und Sachen wie Callstack usw. haben mir sehr geholfen. Aber...ich bastel seit einer Weile wieder an einem Featuritis reichen Projekt und habe große Schwierigkeiten Fehlerquellen in Threads zu ermitteln.
Was ist denn die Beste vorgehensweise um eine Multi-Threaded Applikation zu Debuggen?
Problem: die SW (webserver) kann in verschiedenen multi- single- oder no-threaded Variationen ausgeführt werden (hatte bis jetzt auch immer seine Vorteile zur Fehlersuche und Optimierung). Der Server soll wahlweise das "Hauptprojekt" sein können, oder als Nebenschnittstelle fungieren können. Das Backend für eine WebApp oder für ein Hauptprojekt oder als sonstige Schnittstelle für ein Spielchen.
Es gibt leider mehrere Abstraktionsschichten welche das Debugging in Echtzeit verlangsamen "wegen" Purifier. Ich habe alle Datei Operation beispielsweise in Module verkappselt, damit man transparent aus dem RAM, Datei oder sonstiger Quelle "streamen" kann, z.B. StreamLOF(), das ganze noch mit einem Cache System verkompliziert. Oder ein "Archive2D" das noch dazwischen geschaltet sein kann ... Daher dauert das verarbeiten von kleinen INI Dateien (eigene Implementation) eben fast eine Minute mit Debugger wenn es eigentlich nur 0ms ohne dauert.
Nun es sind jetzt über 600kb an Code geworden über dutzende Module verteilt.
Ich benutze viel eingebettete PB Listen und Maps und nutze diese auch als Eingabe/Rückgabe Parameter. z.B. ListServerConntections(*Server, List result.i()) oder sowas. Auch viel String- und Speicher- Manipulation. Ich bin mir manchmal nicht ganz sicher, ob es auch nicht an PB liegt. Weil ich denke es könnte sein, daß wenn PB maps und listen pre-alloziiert, es dann beim nächsten neuen Block stecken bleibt oder sowas weil das über einen anderen (?) thread passiert. Reinste Spekulation! EnableThreads is selbstverständlich auch immer an, sonst geht es ganz schnell nicht mehr weiter.
Fehler sind Endlosschleifen (bei List oder Map ForEach Next), Invalid Memory (meist bei Procedure Rücksprung, oder bei AllocateMemory/AllocateStructure) - aber erst nach einer unbestimmt langen Wartezeit oder nach vielen Anfragen (+10,000 requests) mit Stresstest. Manchmal passiert nichts Sichtbares, es wird nichts auf der Console ausgegeben oder in die Logdatei geschrieben. Und die OnError Zeilen sind wie gesagt nicht immer zielführend.
Es gibt nur einen Sourcecode den ich benutze, und der nicht von mir geschrieben wurde - das sind die numerischen Listen von wilbert im englischen Forum. Aber da hängt es nur äußerst selten und es dürfte eigentlich nicht (so wie ein IMA bei AllocateMemory eben). Das Mysterium besteht allgemein und ich vermute irgend welche memory leaks oder ein Stack Problem weil ich irgendwo meine Prototypen und Prozeduren nicht harmoniert habe. Doch das sollte dann eigentlich einfacher erkennbar sein!!!
Schämen sollte ich mich, weil ich noch keinen Chat in das System eingebaut habe. Ich will einen Chat erstmal per selbstverbockten Templates + Sqlite lösen, bevor ich Fast/CGI implementiere. Der Chat sollte eben nicht hard-coded sein. Und es müssen ja erst die Grundlagen funzen, ohne GUI weil ja möglicherweise reine Consolen oder Fullscreen Anwendungen dabei entstehen sollten.
Wenn es etwas gibt was mir jemand anraten oder abraten kann... ich bitte inständig um Aufkärung
Edit: NewList macht auch probleme. Seit 5,73 beta zeigt mir PB auch an wenn eine Liste mehrfach instanziiert wurde. Das hat auch solche Probleme verursacht, ist jetzt aber beseitigt worden. Trotzdem gibt es Fehler bei "Protected Newlist txt.s()" und Ähnlichen Code-stellen.