Announcement

Collapse
No announcement yet.

Keine Exception bei Division durch 0, dadurch Bluescreen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Keine Exception bei Division durch 0, dadurch Bluescreen

    Hallo!

    Bei manchen neueren Mainboards mit AMD-Prozessor tritt unter Win98 folgendes Problem auf.
    Ein try..except statement löst bei einer Division durch 0 keine Exception aus, sondern führt spätestens nach mehrmaligem Ausführen zum Bluescreen. Mit Intel-Rechnern trat das Problem bisher nicht auf. Zum testen habe ich einfach ein Formular mit einem Button erstellt und folgenden Code in den OnClick-Handler eingefügt. Das ganze funktioniert nur, wenn die Codeoptimierung in den Projektoptionen ausgeschaltet ist, sonst wird der (zugegebenermassen sinnlose Code :-) ) wegoptimiert.

    procedure TForm1.Button1Click(Sender: TObject);
    var x,y : real;
    begin
    x:=0;
    try
    y:=1000/x;
    except
    y:=1;
    end;
    end;

    Bis zur Exception kommts eigentlich garnicht, weil ich einen netten Bluescreen erhalte vorher. Das ganze lässt sich umgehen, wenn ich in der Systemsteuerung den Numerischen Coprozessor abschalte. Dann läuft das Programm ordnungsgemäß. Zuerst wusste ich nicht, ob man überhaupt eine Division durch 0 mit einer Exeception abfangen sollte, aber als ich in der Delphi Hilfe genau so ein Beispiel zum try..except statement fand, hielt ich es für O.K.

    Mittlerweile haben 6 verschiedene Kunden das Problem. Hat vielleicht jemand eine Ahnung was das sein könnte? Liegts am Delphi? Oder am Chipsatz? Ich habe grad einen Rechner hier mit Asus A7V266 mainboard und 1200er Athlon, da tritt das auf, aber auch andere Rechner mit anderen mainboards und 800er Amd haben das.

    vielen Dank im Vorraus,

    Carsten Hirschfeld

  • #2
    Hallo,<br>
    als ich das gelesen habe, fand ich es recht amüsant - bis mir aufgefallen ist, dass ich ja selbst einen 1400 GHz Athlon Prozessor besitze. Ich hab den Quelltext ausprobiert (unter W2k) und bei mir passiert gar nichts! Der Debugger springt vom Begin der Routine sofort zum end. es ist egal, ob ich die Codeoptimierung ein- oder ausschalte. Eine Exception wurde erst ausgelöst, als ich die Variablen x und y außerhalb der Prozedur deklariert habe (unter var).
    <br>
    Gruß Alex

    Comment


    • #3
      Schau mal die Diskussion mit dem Titel "0 / 0 ergibt BlueScreen" an. Dort werden Hinweise gegeben (z.B. bestimmte HP Druckertreiber

      Comment


      • #4
        Hallo Carsten,<p>
        ..ich hatte ja die Diskussion <b>0 / 0 ergibt BlueScreen</b> eröffnet. Leider konnte ich das Problem nicht auf Druckertreiber zurückführen. Bei einem Testrechner war als einziger wirklich nachinstallierter Treiber nur die Grafikkarte (keine spezielle 3D, irgendso eine Ati 0815) und der Chipsatz. Die einzig wirklich helfende Lösung in meinem Falle war die Abfrage, ob Quozient und Divisor Null sind. Zudem wird man dem Kunden auch nur schwer begreiflich machen können, den Druckertreiber zu deinstallieren, um Deine Anwendung zum laufen zu bekommen...<p>
        Schöne Grüße und viel Erfolg, Mario Noac
        Schöne Grüße, Mario

        Comment


        • #5
          Besorg dir mal die Jedi Code Library http://delphi-jedi.org/CODELIBJCL <br>
          Mit Jcl8087.pas kann man die FPU Flags auslesen. Damit bekommst du raus ob sie verstellt sind. Zur Not kannst du sie dann auch wieder richtig setzen

          Comment


          • #6
            System.Set8087CW(NewCW: Word);

            Hage

            Comment

            Working...
            X