Machen immer noch Ärger: Druckertreiber


Thomas Wölfer
Thomas Wölfer

20. März 2012


Man soll es nicht für möglich halten, aber auch in 2012 gibt es noch Druckertreiber, die sich einfach nicht korrekt verhalten – und dadurch für Seiteneffekte sorgen, die alles andere als lustig sind.  In diesen hier haben wir mehrere Stunden investiert…

Alles ging mit einer Fehlermeldung eines Kunden los: Immer nach dem Ausdruck war bei Ihm das Koordinatensystem von senkrechten Stäben vertauscht: Die Z-Achse zeigt nicht länger nach rechts, sondern nach links. Natürlich waren dann auch die Ergebniskurven auf der “falschen” Seite der Stäbe, Beschriftungen standen teilweise auf dem Kopf… man kann es sich wohl einigermaßen vorstellen.

Nachdem die Baustatik ja nun nicht nur auf 2 Rechnern eingesetzt wird, war es einigermaßen naheliegend, das das Problem irgendwas mit dem Drucker(treiber) des Kunden zu tun haben musste – denn wenn die Ergebnisse grundsätzlich auf der falschen Seite rauskommen würden, dann würde ich das sicher wissen.

Wir ermittelten also den Drucker, installierten den Treiber und probierten das genau geschilderte Szenario aus: Fehler trat natürlich nicht auf. Auf genauere Rückfrage kam dann raus: Es handelt sich um ein 32bit Windows – im Münchner Büro kommt aber schon seit geraumer Zeit nur 64bit Windows zum Einsatz… Also: ein 32bit System besorgt, 32bit Druckertreiber installiert, Scenario ausprobiert – und Pronto: Der Fehler war reproduzierbar. Sobald man den Druckertreiber das erste Mal verwendete (egal ob über einen Ausdruck, oder einfach nur in der Bildschirmansicht) kippte das Koordinatensystem mit allem drum und dran.

Nach weiteren Untersuchungen war dann auch klar, was passiert: Der Treiber verändert den FPU-Status und zwar um genau zu sein: Das Precision Control Feld der FPU. Selbiges hat Einfluss auf die Genauigkeit der Berechnung. Wieso ein Druckertreiber so was tut ist mir zwar völlig unklar, aber es ist ihm natürlich völlig unbenommen, die entsprechenden Status-Bits zu verändern. Die C-Laufzeitbibliothek hat auch extra mehrere Funktionendafür.  Es ist allerdings auch kein besonders großes Geheimnis, das man diesen Status-Bits zwar ungestraft verändern kann – man muss sie aber auch hinterher wieder unbedingt auf die ursprünglichen Werte zurücksetzen. Auch kein großes Geheimnis.

Vergisst man aber, den Status zurückzusetzen, dann rechnet das eigentliche Programm vorher was anderes als hinterher – so wie zum Beispiel die Baustatik, bei der dann einfach mal so eben die Koordinatensysteme “kippen”.

Der Drucker war übrigens ein HP OfficeJet Pro 8500a.

Ab dem nächsten Update werden wir einen Schalter haben, mit dem man ein derartiges fehlerhaftes Verhalten eines Druckertreibers korrigieren kann. (Auch wenn wir bisher noch nie über einen anderen Druckertreiber gestolpert sind, der auch so ein Problem hatte. Zumindest kann ich mich nicht dran erinnern.)

Noch so ein Ding, das wirklich nicht hätte sein müssen. (OK: Besser als mein anderes Erlebnis mit HP)