La mia app è scritta in Delphi5. Sto usando madExcept per rintracciare i bug. Ho rintracciato un'eccezione "Dvision a virgola mobile per zero", dove non dovrebbe essere. Il segmento di codice, dove viene generato, è il seguente:Divisione in virgola mobile con eccezione zero in Delphi5
val:=100*Power(1.25,c);
dove 'c' ha sempre il valore '1'.
L'analisi dello stack del registro:
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
ho avuto un'altra eccezione a un certo punto, in cui una divisione ha avuto luogo, ma il divisore era una variabile, che aveva anche il valore '1' quando il si è verificata un'eccezione. Che ero in grado di eseguire il debug e riprodurre.
La mia domanda: cosa mi manca? Ci sono dei falsi positivi sulla divisione in virgola mobile di cui non sono a conoscenza?
Inoltre: non utilizzo alcuna DLL C++ nei punti di eccezione in quanto tendono a gestire le divisioni FP in modo diverso (restituendo NaN o +/- INF anziché sollevare un'eccezione).
Qualsiasi suggerimento apprezzato.
Non sembra molto plausibile. Non penso che i tuoi strumenti di debug ti indirizzino nel posto giusto, o forse le variabili non trattengono ciò che pensi di essere. –
Non ricordo se D5 lo avesse già, ma hai provato a controllare cosa sta succedendo nella vista CPU/FPU quando quel codice viene eseguito? –
@ldsandon Ovviamente D5 già ha permesso di usare Alt-F2 ed entrare nella vista CPU/FPU. Buona idea. Ma suppongo che un'eccezione FPU non gestita si romperà nel codice 'System._Frac'. –