Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Division durch 0 -> NAN (https://www.delphipraxis.net/151702-division-durch-0-nan.html)

Gruber_Hans_12345 28. Mai 2010 16:38

Re: Division durch 0 -> NAN
 
hmmmmmmm

also, wenn ich
Delphi-Quellcode:
SetExceptionMask(GetExceptionMask - [exZeroDivide]);
direkt VOR meiner division stelle, dann passt es
aber schon beim nächsten aufruf ist es schon wieder umgestellt.

Wie finde ich nun heraus welches programm oder sonstige mir das ständig umstellt?

himitsu 28. Mai 2010 16:54

Re: Division durch 0 -> NAN
 
Wird diese Maske nicht eigentlich nur für jeden Prozess/Thread privat gesetzt?
Wenn, dann dürften doch Femdprogramme daran nichts ändern können. (ok, abgesehn von irgendwelchen Hooks, eingeschmuggelten DLLs usw.)

Such doch mal in deinem Projekt, ob irgendwo etwas derartiges gesetzt wird?

Strg+Shift+F
Suchwort= "(SetExceptionMask|Set8087CW|FLDCW)"
RegEx aktiviert
im Projektverzeichnis

Eventuell auch mal einen Haltepunkt auf die beiden Prozeduren SetExceptionMask und Set8087CW, mit Debug-DCUs,
wobei natürlich direkte ASM-Aufrufe so nicht entdeckt werden.


Du könntest auch "exZeroDivide in GetExceptionMask" in die überwachten Variablen aufnehmen und wärend des Debuggens immer mal einen Blick drauf werfen.

Gruber_Hans_12345 28. Mai 2010 19:33

Re: Division durch 0 -> NAN
 
hmmmm, das komische ist, das die fertige compilierte exe auf dem anderen rechner ja diese div/0 exceptions aufruft ... bzw timmt nicht ganz, es sind nun ja "unghültige gleitkommaoperation" exceptions ....
werde am monetag das ganze noch ein mal testen, auch den rechner mal neu starten, bzw BDS mal neu starten ...

rollstuhlfahrer 28. Mai 2010 19:41

Re: Division durch 0 -> NAN
 
a) mal alle kompilierten Dateien löschen und b) mach das doch mal in einem leeren Projekt. Dann zeigt sich, ob es am Rechner hängt, oder an dem Programm direkt.

Bernhard

Gruber_Hans_12345 31. Mai 2010 08:26

Re: Division durch 0 -> NAN
 
soooooo ....

habe mal einiges ausprobiert
Neues Projekt -> da macht ers anscheinend nicht.

Im aktuellen projekt, habe ich mal Breakpoints auf die Funktion gesetzt (Set8087CW)
und mir die werte angeschaut
ich alsse mir die 3 werte ausgeben beim breakpoint (Get8087CW, NewCW, Default8087CW)
wenn ich den Wert $137B setze, dann ist
Delphi-Quellcode:
NewCB = $137B
Default8087CW = $137F
Get8087CW = $137F
kurz danach ist es immer noch so
aber dann so eine sekunde später
ist es dann

Delphi-Quellcode:
NewCB = $137F
Default8087CW = $1378
Get8087CW = $137F
dass heisst für mich, das der Wert ausserhalb von Delphi geändert worden is, bzw per ASM, da es nur so geht, das der Default8087CW nichts davon mitbekommt ...

wie finde ich das nun raus?

rollstuhlfahrer 31. Mai 2010 16:50

Re: Division durch 0 -> NAN
 
Zitat:

Zitat von Gruber_Hans_12345
habe mal einiges ausprobiert
Neues Projekt -> da macht ers anscheinend nicht.
[...]
dass heisst für mich, das der Wert ausserhalb von Delphi geändert worden is, bzw per ASM, da es nur so geht, das der Default8087CW nichts davon mitbekommt ...

So, am Rechner liegts also nicht. Auch nicht an bestimmten Treibern o.ä. denn sonst müsste der Fehler ja reproduzierbar sein. Meiner Meinung nach müsste irgendwas in dem Programm dafür sorgen, dass

Zitat:

Zitat von Gruber_Hans_12345
wie finde ich das nun raus?

Hast du in deinem Programm irgendwelchen hochtrabenden Grafik-Schnickschnack? - Embarcadero schlägt nämlich vor, die FPU-Exceptions bei der Verwendung von OpenGL zu deaktivieren. Ansonsten könnte das auch irgendeine Komponente verursachen. Was allerdings fraglich ist, ist weiterhin, warum der Wert immer wieder auf seinen alten Wert zurückgesetzt wird.

Bernhard

himitsu 31. Mai 2010 17:04

Re: Division durch 0 -> NAN
 
Ob es am Programm oder am System liegt, kann man ja relativ leicht rausfinden.
> auf anderen PCs, mit anderer Hardware und eventuell anderem OS mal ausprobieren

rollstuhlfahrer 31. Mai 2010 17:18

Re: Division durch 0 -> NAN
 
Ich finde, es ist schon bestätigt, dass es am Programm liegt. Einerseits kommt ja bei anderen eine Exception (siehe #1) und hier kommt mit einem anderen Programm auch eine Exception. Dies lässt also nur noch den Schluss zu, dass es am Programm liegen muss. Oder besser gesagt an der Programm-Rechner-Kombination. Oder ist das nur eine neue Version, die spinnt?

Bernhard

himitsu 31. Mai 2010 17:35

Re: Division durch 0 -> NAN
 
Zitat:

Ich finde, es ist schon bestätigt, dass es am Programm liegt.
Bestätigt ist nichts.

Es kann ja sein, daß hier im Programm was verwendet wird, wodurch etwas externes so reagiert.

z.B. könnte ein DLL verwendet werden, welche wiederrum was anderes läd/auslöst, welches "nur" auf diesem PC etwas "anders" reagiert.

Gruber_Hans_12345 1. Jun 2010 12:12

Re: Division durch 0 -> NAN
 
Also, Entwicklungsrechner neu starten brachte keine Besserung.

Jetzt habe ich das Phänomen auch auf meinem zweiten Rechner (Kann auch sein, das der es vorher auch schon hatte und nicht auffiel)

Ich habe in die Titelleiste eingebaut, das er mir immer den Status des CW anzeigt, per Timer - alle 100ms
und einen Button mit dem ich das CW rücksetzen kann.

Dann sieht man schön, rückgesetzt auf den richtigen Wert. Dann zwischen ein paar ms und 2 sekunden, steht wieder der falsche Wert im CW drinnen ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz