Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "Ungültige Gleitkommaoperation" Fehler finden? (https://www.delphipraxis.net/181798-ungueltige-gleitkommaoperation-fehler-finden.html)

AlexII 9. Sep 2014 19:37

Delphi-Version: 7

"Ungültige Gleitkommaoperation" Fehler finden?
 
Hallo,

ich suche schon seit Wochen den "Ungültige Gleitkommaoperation" Fehler und finde nicht wo dieser im Code (ca. 6000 Zeilen) ausgelöst wird. Der erscheint auch sehr selten, dass ich nicht dahinter komme, welche Klicks ihn auslösen... bin schon am verzweifeln. :roteyes:

Kann man diesen vllt irgendwie ohne Debugger finden oder wenigstens eingrenzen?

Danke!

Edit: kann diese Zeile den Fehler auslösen, wenn SendBitrate String ist?
Delphi-Quellcode:
if (SendBitrate <> '') and (StrToInt(SendBitrate) >= 16) and (StrToInt(SendBitrate) <= 256) then

himitsu 9. Sep 2014 19:49

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Es gib sowas wie Eurekalog und das Andere, dessen Name ich immer vergesse,
die bieten dir bei Exceptions praktiche Zusatzinfos an, wie z.B. einen Stacktrace.

Auch in den Jedi ist etwas enthalten.


Nein, da sind ja nur Integer, also Ganzzahlen, und keine Gleitkomma-/Fließkommazahlen.

AlexII 9. Sep 2014 19:58

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Ich dachte einfach, dass '' (also leerer String) nicht in Int konvertiert werden kann.

himitsu 9. Sep 2014 20:02

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
'' kann auch nicht nach Integer konvertiert werden, genauso wie alles was keine Zahl ist, wie z.B. '-', 'a', 'a1' usw.

TryStrTo... und StrTo...Def
Delphi-Quellcode:
if TryStrToInt(SendBitrate, i) and (i >= 16) and (i <= 256) then

* erspart das doppelte Umwandeln
* und kann auf Fehler prüfen, ohne daß es zu einer Exception kommt

Uwe Raabe 9. Sep 2014 20:09

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Zitat:

Zitat von himitsu (Beitrag 1271893)
das Andere, dessen Name ich immer vergesse,

madExcept

jaenicke 9. Sep 2014 20:16

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Zudem könntest du nach Divisionen oder ähnlichen Rechenoperationen suchen. ;-)

AlexII 9. Sep 2014 20:25

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Zitat:

Zitat von jaenicke (Beitrag 1271900)
Zudem könntest du nach Divisionen oder ähnlichen Rechenoperationen suchen. ;-)

Das ist ja das Problem, ich habe keine Rechenoperationen.

AlexII 9. Sep 2014 20:26

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Zitat:

Zitat von himitsu (Beitrag 1271895)
'' kann auch nicht nach Integer konvertiert werden, genauso wie alles was keine Zahl ist, wie z.B. '-', 'a', 'a1' usw.

TryStrTo... und StrTo...Def
Delphi-Quellcode:
if TryStrToInt(SendBitrate, i) and (i >= 16) and (i <= 256) then

* erspart das doppelte Umwandeln
* und kann auf Fehler prüfen, ohne daß es zu einer Exception kommt

Was ist in diesem Fall i?

Helmi 9. Sep 2014 20:45

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
eine (lokale) Variable des Typs Integer

Delphi-Quellcode:
TryStrToInt
versucht den String in einen Integer (i) zu wandeln
ist es möglich (Result = true) dann steht in i der gewandelte Wert
geht's nicht, dann sollte man auf den Rückgabewert Result = false reagieren

himitsu 9. Sep 2014 20:45

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Zitat:

Zitat von AlexII (Beitrag 1271902)
Was ist in diesem Fall i?

TryStrToInteger :roll:

TiGü 10. Sep 2014 08:35

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
@AlexII: Arbeitest du mit TWebBrowser, ActiveX-Elementen oder OpenGL?

Wenn ja, versuche folgendes zu implementieren, irgendwo in einen initialization- oder class constructor-Abschnitt.
Delphi-Quellcode:
uses
  System.Math;
...
var
  ExceptionMask : TArithmeticExceptionMask;
begin
  ExceptionMask := GetExceptionMask;
  Include(ExceptionMask, exInvalidOp);
  SetExceptionMask(ExceptionMask);
end;
Siehe auch:
http://docwiki.embarcadero.com/Libra...tExceptionMask

AlexII 10. Sep 2014 08:38

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Danke Dir, aber ich habe eigentlich keine arithmetischen Operationen... aber ich arbeite mit ListBoxen. Ich vermute schon, dass der Fehler damit verbunden ist, dass da irgendwo auf ItemIdex -1 zugegriffen wird, aber wo finde ich auch nicht.

DeddyH 10. Sep 2014 08:40

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Das würde aber andere Fehler werfen (ListIndex out of bounds).

AlexII 10. Sep 2014 08:46

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Dann muss es wohl an dieser Zeile liegen, oder an der SendBitrate an anderer Stelle... weil das ist fast das Einzige was ich neu hinzugefügt habe, bevor der Fehler kam.

Delphi-Quellcode:
if (SendBitrate <> '') and (StrToInt(SendBitrate) >= 16) and (StrToInt(SendBitrate) <= 256) then
Werde es mit TryStrToInt versuchen.

DeddyH 10. Sep 2014 08:52

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Das müsste aber ggf. einen EConvertError auslösen, kann es also eigentlich auch nicht sein. Wie schon oben angedeutet musst Du irgendwo mit Gleitkommazahlen rechnen (vielleicht auch indirekt über irgendwelche Komponenten).

TiGü 10. Sep 2014 09:20

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Zitat:

Zitat von AlexII (Beitrag 1271939)
Danke Dir, aber ich habe eigentlich keine arithmetischen Operationen... aber ich arbeite mit ListBoxen.

Wie ich bereits schrieb, DeddyH noch mal besonderes betonte und auch in der verlinkten Doku steht, muss es nichts damit zu tun haben das du keine +, -, * und / Operatoren im Quelltext benutzt, sondern das andere Komponenten diesen Fehler verursachen können.

Sherlock 10. Sep 2014 09:29

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Bei der Konvertierung eines ungültigen Strings zu Integer kommt doch eher ein "Ist kein gültiger Integer Wert" oder so ähnlich. Der Gleitkomma-Fehler hat eher etwas mit falschen Dezimaltrennern (oder auch Tausendertrennzeichen) zu tun, auch schon wenn man mit Datum hantiert.

Sherlock

himitsu 10. Sep 2014 09:41

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Zitat:

Zitat von Sherlock (Beitrag 1271958)
Der Gleitkomma-Fehler hat eher etwas mit falschen Dezimaltrennern (oder auch Tausendertrennzeichen) zu tun, auch schon wenn man mit Datum hantiert.

Oder binär ungültige Daten in einer Fließkommavariable und eventuell auch ungültige Rechenoperationen. (wobei aber z.B. DivByNul seinen eigenen Fehlercode hat)

Dejan Vu 10. Sep 2014 13:04

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Zitat:

Zitat von AlexII (Beitrag 1271944)
Dann muss es wohl an dieser Zeile liegen, oder an der SendBitrate an anderer Stelle... weil das ist fast das Einzige was ich neu hinzugefügt habe, bevor der Fehler kam.

Delphi-Quellcode:
if (SendBitrate <> '') and (StrToInt(SendBitrate) >= 16) and (StrToInt(SendBitrate) <= 256) then
Werde es mit TryStrToInt versuchen.

Sag mal, ist Dir mal in den Sinn gekommen, einfach mal *auszuprobieren*, ob dieser oder ein anderer Fehler auftritt, wenn dein String 'SendBitRate' kein gültiger Integer ist? Um Fehler zuverlässig zu vermeiden, muss man sie zunächst
(1) lokalisieren, dann
(2) reproduzieren dann <--------
(3) eliminieren (aka reparieren).

Und wenn das nicht hilft. dann
(3a) kaschieren.

MES 11. Sep 2014 10:23

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Setzt Du irgendwo einen Farbcode ein?

Dejan Vu 11. Sep 2014 13:05

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
TColor-Werte verursachen einen Floating Point Error?

BTW: Handelt es sich um eine FMX-Anwendung?

baumina 11. Sep 2014 13:11

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Zitat:

Zitat von Dejan Vu (Beitrag 1272216)
BTW: Handelt es sich um eine FMX-Anwendung?

Mit Delphi 7 kaum zu bewerkstelligen :-D

Dejan Vu 11. Sep 2014 13:18

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Wo ist das Icon, wo man in den Boden vor Scham versinkt?:stupid:

AlexII 11. Sep 2014 14:24

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Zitat:

Zitat von MES (Beitrag 1272183)
Setzt Du irgendwo einen Farbcode ein?

Ja habe ich... aber schon seit über einem Jahr, der Fehler kommt aber seit Kurzem. |||
Was kann den daran falsch sein?

Dejan Vu 11. Sep 2014 15:17

AW: "Ungültige Gleitkommaoperation" Fehler finden?
 
Besorg dir madExcept. Kostnix. Die Jedis haben das auch -glaub ich-

Aber mit madExcept kannst Du dir sogar eine E-Mail zuschicken lassen, wenn ein Fehler auftritt und im Anhang der Mail ist eine Datei und wenn Du da raufklickst, dann öffnet sich Delphi und springt genau in die Zeile, wo der Fehler aufgetreten ist :shock:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 Uhr.

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