Hi Peter,
Da hast du dir was schönes angelacht!
Wenigstens einer der mal MITLEID mit mir hat Was solls aber? Wenn ich es schaffe, bin ich der Held, wenn nicht ist auch nicht viel kaputt. Die ersten Polarforscher standen vor der selben Situation, nur dass ihre Aussichten, wenns nicht klappt, ungleich schlechter waren
- Du weisst gar nicht, ob das Problem über die
Benutzeroberfläche überhaupt reproduzierbar ist.
Möglicherweise müssen auch noch weitere Bedingungen erfüllt
sein.
So isses. Was tun? So lange an allen möglichen Stellen im Dunken stochern bis es irgendwo quiekt, und hoffen dass man die Sau raustreiben kann, um sie dann waidmännisch aus kurzer Distanz mit einer völlig überdimensionierten Waffe zu erledigen
An irgendeiner Stelle wurde nun aber manchmal die Position p+1
abgefragt. Das funktionierte fast immer, ausser wenn p gerade
auf das letzte Zeichen im Puffer zeigte.
Wenn man dann ein Leerzeichen vor dieser Stelle im Sourcecode
eingefügt hat, konnte alles problemlos compiliert werden.
Teuflische Dinger sind das. Ich sage nur: Turbo Pascal, Editor, unsichtbare Steuerzeichen im Sourcecode. Er jault dann z.B. nach schließenden Anführungszeichen und stellt den Cursor, der den Fehler anzeigt, genau auf das schließende Anführungszeichen.
Oder Microsofts erster täppischer Versuch, Quotierung zu implementieren. Abgesehen davon dass bereits die Grundidee, Dummheit bei der Anwendung von Software mit Software zu bekämpfen immer schon keine gute war, konnte man Accounts, die ein „@“ Zeichen im Accountnamen haben, nicht quotieren. Sie wurden beim Eingeben der Quote einfach nicht gefunden. Blöd wenn ein früher Pionier auf die idee kam, dass es eigentlich toll wäre wenn seine Anwender sich mit ihren E-Mail Adressen anmelden könnten. Der „@“ war damals sowohl in einem Benutzer- als auch in einem Gruppennamen zulässig. inzwischen wurde das geändert. Die Pioniere sind eben immer die, die mit den Pfeilen im Rücken in der Prärie liegen, und meistens sind die Pfeile blau und haben „Greetz by Microsoft“ auf den Federn stehen.
Erstmalig ist der Fehler beim Rumspielen mit dem neuen
Compiler aufgetreten. Wir haben dann, unter anderem, eine
ganze Finanzbuchhaltung programmiert, dabei ist dieser Fehler
dann noch 1-2 mal aufgetreten.
Das mit der Reproduzierbarkeit ist nicht immer einfach!
Wem sagst Du das (ächz). Ich könnte der endlosen Liste der EDV Anekdoten noch unzählige hinzufügen. Eventuell kann www ja eine eigenes Forum „IT Götter- und Heldensagen“ eröffnen? Es wäre sicher viel lustiges dabei
Zu Beispiel eine meiner berühmtesten Programmierfehler, es ging um eine Art Raytracer, der Code war so ungefähr so:
For x = 0 to Raumlänge Step Schrittweite\_x
For y = 0 to Raumbreite Step Schrittweite\_y
For z = 0 to Raumhöhe Step Schrittweite\_z
... langwierige geometrische Berechnungen ...
Winkel = ....
// Falle: Tan (90 Grad) wäre nicht definiert wir weichen elegant aus
if abs(WInkel) = pi/2
... irgendeine mathematische Notlösung
else
Irgendwas := tan(Winkel) plus, minus, mal bla, schwatz, plapper
endif
... langwierige Berechnungen mit irgendwas ...
Next z
Next y
Next x
Programm fliegt in der Zeile mit dem Tangens aus der Kurve, aber nicht immer. Da die Geometriedaten aus realen Raumabmessungen stammten stellte ich nur fest, dass mein Programm bei manchen Räumen auf die Bretter ging und bei ganz, ganz vielen nicht. Ich habe mich zu Tode gesucht, bis ich irgendwann draufgekommen bin, dass der Rundungsfehler durch die endliche Stellenanzahl bei Gleitkommazahlen in der Sicherheitsabfrage mit dem If dafür gesorgt hat, dass manche Winkel die fast, aber nicht ganz, 90 Grad betragen haben, den Test bestanden haben, während die tan() Funktion bereits mit einem Überlauf auf die Nase fiel.
Lösung:
if (WInkel - Pi/2)
Soweit wäre das einfach nur ein lästiger Anfängerfehler. Aber es geht lustig weiter ... hast Du schon mal gesehen wie ein Epson Nadeldrucker in die Thermosicherung läuft, und wenn ja oder nein, egal, was hat das damit zu tun?
Nun, in meiner Naivität habe ich in der z Schleife Testausgaben aller möglicher Variablenwerte eingefügt, je Durchlauf wurde eine Zeile auf meinem Epson Drucker geschrieben. Der Plan: wenns crasht, kann ich die Variablenwerte in der letzen gedruckten Zeile abholen. Dann habe ich das Programm laufen lassen, ich hatte ja keine Vorstellung davon, wie viele Millionen Durchläufe ich bei x\*y\*z Berechnungen bekomme :smile:
Das Programm lief und lief, der Drucker druckte brav Zeile um Zeile auf Endlospapier, mir wurde langweilig und ich ging Mittagessen. Als ich zurückkam waren mehrere Dinge passiert:
- Der Drucker hatte etwa einen 2/3 Pack Endlospapier durchgejagt. Soweit ich mich erinnere waren so um die 2500 Blatt in einem Karton.
- Der Druckkopf war so heiß dass die Thermosicherung angesprungen ist, was heißt: 1 Zeile drucken, 3 Sekunden verschnaufen (abkühlen), nächste Zeile drucken, verschnaufen. Gepufferte Ausgabe gabs nicht, deshalb hat mein Programm auch brav gewartet bis die Zeile gedruckt war bevor es weiter gerechnet hat. Allzu weit war es noch nicht gekommen :smile:
- Die Papierfahne war bereits meterweit ins Büro vorgedrungen
- Ein Witzbold von Kollege hat das Ganze gesehen und aber nicht etwa mein Programm gestoppt, sondern den Drucker auf einen Rollcontainer gehoben und dann einen Papierkorb so drunter gestellt dass das Papier direkt aus dem Drucker in den Papierkorb lief
- An meinem Bildschirm klebte ein Postit, auf dem stand: "Was soll das? Hardware-Dauertest Epson-Drucker???" (gez: Cheff)
> -)
Armin.