Moja aplikacja została napisana w Delphi5. Używam madExcept do śledzenia błędów. Wyszedłem z wyjątku "Floating point dvision by zero", gdzie nie powinno być. Segment kodu, w którym jest podnoszona, jest następujący:Rejon zmiennoprzecinkowy dzielony przez zero w Delphi5
val:=100*Power(1.25,c);
gdzie "c" zawsze ma zawsze wartość "1".
Ślad stos protokołu:
main thread ($338f8):
00403504 +010 MyApp.exe System 1970 +5 @FRAC
00479148 +058 MyApp.exe Math Power
007ae8a6 +262 MyApp.exe MyClass 1962 +36 TMyClass.FormMouseWheel
miałem inny wyjątek w jednym punkcie, w którym podział doszło jednak dzielnik był zmienny, co miało również na wartość „1”, gdy wystąpił wyjątek. Że byłem w stanie debugować i rozmnażać.
Moje pytanie: czego mi brakuje? Czy są jakieś fałszywe alarmy dotyczące dzielenia zmiennoprzecinkowego, o których nie wiem?
Ponadto: Nie używam żadnych bibliotek DLL C++ w punktach wyjątku, ponieważ mają one tendencję do obsługi podziałów FP inaczej (zwracanie NaN lub +/- INF zamiast podnoszenia wyjątku).
Wszelkie wskazówki są mile widziane.
Brzmi nieprawdopodobnie. Nie sądzę, aby twoje narzędzia do debugowania wskazywały ci właściwe miejsce, a może zmienne nie trzymają tego, co Twoim zdaniem są. –
Nie pamiętam, czy D5 już go miał, ale czy próbowałeś sprawdzić, co dzieje się w widoku CPU/FPU, kiedy ten kod jest wykonywany? –
@ldsandon Oczywiście D5 już może używać Alt-F2 i wkraczać do widoku CPU/FPU. Dobry pomysł. Ale domyślam się, że nieobsługiwany wyjątek FPU złamie kod 'System._Frac'. –