Debuguję większy program numeryczny, do którego dodałem. Jest napisany w fortran90, skompilowany z gfortran (najnowszą wersją dostępną dla Maca) i debuguję go za pomocą gdb (znowu najnowsza wersja dostępna dla Maca).Debugowanie za pomocą gdb i gfortran - FPE
Moje dodatki mają gdzieś błąd i próbuję go zlokalizować, co jest jasne, ponieważ uruchomienie programu nie przynosi oczekiwanego rezultatu. Kiedy uruchamiam go w gdb, otrzymuję następujący wynik na koniec:
Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG IEEE_DIVIDE_BY_ZERO IEEE_UNDERFLOW_FLAG IEEE_DENORMAL [Inferior 1 (process 83843) exited normally]
Chciałbym zidentyfikować dokładnie gdzie występuje to FPE, ale wydaje się, że zmiennoprzecinkowych wyjątek nie spowoduje program do awarii. Przetestowałem to przez wyraźne podzielenie przez 0 w moim kodzie - nie spowodowało to, że program przestał działać, ale doprowadził do nieoczekiwanego zachowania.
Jaka jest prawidłowa flaga dla gdb lub gfortran, aby upewnić się, że program przestaje działać (najlepiej ze śledzeniem wstecznym) po osiągnięciu wyjątku zmiennoprzecinkowego? Próbowałem postępować zgodnie z instrukcjami here, ale wydaje się, że nic nie zmienia.
istnieją flagi kompilatora mowa w https://stackoverflow.com/questions/10210759/gfortran-warn-on-floating -point-wyjątek, który może pomóc. Czy mógłbyś jednak podać numery wersji w pytaniu? "Najnowsze" będzie mniej użyteczne dla czytelników w przyszłości. – francescalus