Hallo,
ich bekomme seit einigen Tagen (vielleicht tatsächlich seit dem Update auf 3.5.9) einen Ausnahmefehler.
Die Befehlszeilen sind wie folgt:
(*Anzeige-String-Array:alleSaetze1nachoben,letztenSatzfreimachen,damitkontinuierlicherProzessgesichert*)Persistent_Vars.Log_Nr_text:=Globale_Konstanten.Log_Arr_Text_max;Â Â WHILEPersistent_Vars.Log_Nr_text>0Â DOÂ Â Â Â Â Persistent_Vars.Log_Arr_Text[Persistent_Vars.Log_Nr_text]Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â :=Persistent_Vars.Log_Arr_Text[Persistent_Vars.Log_Nr_text-1];Â Â Persistent_Vars.Log_Nr_text:=Persistent_Vars.Log_Nr_text-1;END_WHILE
Aus meiner Sicht dürfte im Code der dann angezeigte Fehler nie auftreten:
Persistent_Vars.Log_Nr_text wird 65535 !!!
Die Frage ist:
wie kann die Variable so einen Wert annehmen. Ich glaube, wenn die Variable 0 erreicht hat und die Whileschleife verlassen werden sollte, dann wird immer nochmal in die Schleife verzweigt, die Variable "läuft über" und steht auf 65768 (eigentlich -1). Da die Variable als WORD definiert ist, ist der Wert wieder erheblich größer 0 und dann ist verständlich, daß die Verschieberei in verbotene Zonen hineinläuft.
Ich kann jetzt die Variable als INT definieren, dann müßte sie kleiner 0 werden und bei -1 die while-schleife spätestens verlassen.
Aber das würde bedeuten, das ich mich nicht mehr darauf verlassen kann das eine while-Schleife bei =0 verlassen wird.
Diese Prozedur ist nicht neu und kannte das Problem noch nicht.
Ich habe auch mal Bildchen rangehängt, wo ich neben dem Fehler auch nach der Variable im ganzen Projekt gesucht habe. Sie wird woanders nicht bewegt.
Da der Code ja nicht besonders umfangreich ist, sollte doch jemand Schlaues entweder meinen Fehler benennen oder einen Lösunsgvorschlag machen. Ich bin auf Grund der Suche schon ziemlich "benebelt" - könnte also ständig über den Fehler wegschauen.
Viele Grüße
Thomas
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo Edwin,
das werde ich mal ausprobieren. Das Schlimme ist, es passiert ja nur ab und zu...
Ich habe noch den Verdacht, das es an der Existenz mehrerer Tasks liegt, die auf ein und dieselbe Prozedur zugreifen. Aber innerhalb so einer dünnen While-Schleife habe ich so ein Problem nie erwartet.
Vielen Dank
Thomas
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
ich bekomme seit einigen Tagen (vielleicht tatsächlich seit dem Update auf 3.5.9) einen Ausnahmefehler.
Die Befehlszeilen sind wie folgt:
Aus meiner Sicht dürfte im Code der dann angezeigte Fehler nie auftreten:
Persistent_Vars.Log_Nr_text wird 65535 !!!
Die Frage ist:
wie kann die Variable so einen Wert annehmen. Ich glaube, wenn die Variable 0 erreicht hat und die Whileschleife verlassen werden sollte, dann wird immer nochmal in die Schleife verzweigt, die Variable "läuft über" und steht auf 65768 (eigentlich -1). Da die Variable als WORD definiert ist, ist der Wert wieder erheblich größer 0 und dann ist verständlich, daß die Verschieberei in verbotene Zonen hineinläuft.
Ich kann jetzt die Variable als INT definieren, dann müßte sie kleiner 0 werden und bei -1 die while-schleife spätestens verlassen.
Aber das würde bedeuten, das ich mich nicht mehr darauf verlassen kann das eine while-Schleife bei =0 verlassen wird.
Diese Prozedur ist nicht neu und kannte das Problem noch nicht.
Ich habe auch mal Bildchen rangehängt, wo ich neben dem Fehler auch nach der Variable im ganzen Projekt gesucht habe. Sie wird woanders nicht bewegt.
Da der Code ja nicht besonders umfangreich ist, sollte doch jemand Schlaues entweder meinen Fehler benennen oder einen Lösunsgvorschlag machen. Ich bin auf Grund der Suche schon ziemlich "benebelt" - könnte also ständig über den Fehler wegschauen.
Viele Grüße
Thomas
Hallo,
ich würde mal die Impliziten Checkbausteine - Checkbounds usw einfügen.
Dann dort einen Brakepoint drin setzten (für die Fälle das über ein Array hinausgeschrieben wird)
So mal ansetzen.
Grüße
Edwin
Hallo Edwin,
das werde ich mal ausprobieren. Das Schlimme ist, es passiert ja nur ab und zu...
Ich habe noch den Verdacht, das es an der Existenz mehrerer Tasks liegt, die auf ein und dieselbe Prozedur zugreifen. Aber innerhalb so einer dünnen While-Schleife habe ich so ein Problem nie erwartet.
Vielen Dank
Thomas