Ein 'interessanter' Fehler


Thomas Wölfer
Thomas Wölfer

20. September 2007


Die Fehlersuche in Software kann manchmal interessante Aspekte der untersuchten Software ans Licht bringen. Heute hatte ich mal wieder so einen Fall: Das Faltwerksprogramm gab eine Fehlermeldung von sich, wenn ein Kunde versuchte, ein neues Profil an einen Stab zuzuweisen. Nun geht das normalerweise klaglos und ich machte mich daher auf die etwas längere Suche...

Wenn man den Dialog für Stabeigenschaften öffnet, dann gibts darauf einen Button, mit dem man ein neues Profil definieren kann. Klickt man da drauf, dann wird der erste Dialog (Stabeigenschaften) unsichtbar und der Dialog zur Profileauswahl wird geöffnet. Darauf wählt man dann ein Profil aus und klickt OK. Der zweite Dialog verschwindet dann, der erste erscheint wieder - und zeigt auch brav das neue Profil an.

Soweit, so gut. Wäre es nun so, das man, während der zweite Dialog geöffnet ist, nichts weiter mit dem Programm tun kann als eben ein Profil auszuwählen, so wäre alles in bester Ordnung. Nur ist das eben nicht so, denn wir hatten schon vor geraumer Zeit beschlossen, das man im Faltwerk keine Dialogboxen schliessen muss, bevor man andere Arbeiten erledigen kann - alle Dialoge sind also "nicht modal". Das ist praktisch: Man kann zum Beispiel zwei Stabdialoge gleichzeit geöffnet haben um die Eigenschaften der Stäbe zu vergleichen, oder auch die Koordinaten von Knoten A messen wärend man gerade die von Knoten B ansieht.

Und natürlich kann man auch sonst praktisch alles tun, was man möchte. Zum Beispiel kann man auch Elemente löschen.

Und das ist genau, was in diesem Fall passierte: Dialogbox A (die für den Stab) war unsichtbar und Dialogbox B (die mit den Profilen) wurde angezeigt. Und dann wurde der Stab gelöscht. Das führte dazu das die (unsichtbare) Dialogbox A geschlossen wurde - sie hatte ja keinen Stab mehr, den sie anzeigen konnte. Dialogbox B hat das nicht weiter berührt. Was auch kein weiteres Drama wäre, würde man die nun mit "Abbrechen" beenden. Das passierte aber nicht, sondern es wurde OK gedrückt.

Der Effekt davon: Nicht schön. Die Dialogbox wurde nämlich geschlossen, und weil sie mit OK geschlossen wurde, versuchte das Programm das auf der Dialogbox ausgewählte Profil im Stab auf Dialogbox A einzutragen. Die waren aber beide schon nicht mehr da. Blöde Sache...

Es ist mir nicht ganz klar wieso wir das bisher übersehen haben, aber in Zukunft ist das anders: Ab dem nächsten Update werden "Kind" Dialoge immer mitgeschlossen, wenn der "Vater" Dialog geschlossen wird. Dann kann sowas nicht mehr passieren.

(Der tatsächliche Vorgang ist noch etwas komplizierter weil insgesamt 4 Dialoge beteilt sind um den Problemfall zu erzeugen; das grundlegende Prinzip ist aber so, wie ich es beschrieben habe.)