Я пытаюсь поймать некоторый FPE в коде Fortran, но, похоже, он не работает в каждой среде.
В качестве примера я написал следующий код:
program test
implicit none
doubleprecision, dimension(1) :: x ! used to lure the compiler
x(1) = 1d0
print *, 'start'
print *, 1d0 / (1d0 - x(1))
print *, 'end'
end program test
Одна из моих машин (1) использует CentOS 7.6.1810, gfortran 4.8.5 и имеет Intel Xenon в качестве процессора. Другой (2) использует Debian 10 Buster (на самом деле это в Windows 10, но я использую приложение Debian для WSL), gfortran 9.2.0 и имеет Intel Core i5 в качестве процессора.
Когда я компилирую приведенный выше код, используя
gfortran -o test -ffpe-trap=zero -fbacktrace -g -Og test.f90
на машине 1 и выполнить код, я получаю то, что ожидаю, т.е.
$ ./test
start
Program received signal SIGFPE: Floating-point exception - erroneous arithmetic operation.
Backtrace for this error:
#0 0x7F2374BEC697
#1 0x7F2374BECCDE
#2 0x7F23740E827F
#3 0x400858 in MAIN__ at test.f90:9
Однако, когда я делаю то же самое на машине 2, я получаю только:
$ ./test
start
Почему ? И что мне делать, чтобы получить сообщение об ошибке SIGFPE (и другие сигналы) на машине 2?