浮動小数点例外 (FPE) を捕獲する場合は、次の 2 つのことを実行する必要があります。まず、プロセスを停止して、次のように入力します。
(dbx) catch FPE
次に、次のコードを Fortran アプリケーションに追加します。
integer ieeer, ieee_handler, myhandler ieeer = ieee_handler('set', 'all', myhandler) ... integer function myhandler(sig, code, context) integer sig, code(5) call abort() end
これは、IEEE ソフトウェアがすべてのエラーをサイレント (シグナルを出さない状態) に設定するために必要です。これにより、すべての IEEE 例外が必要に応じて SIGFPE を生成します。
ieee_handler() のパラメータを調整するか、または dbx catch コマンドの代替を使用すると、表示する例外をさらに調整することができます。
stop sig FPE
これは、catch FPE または次のコードと同様に作動します。
stop sig FPE subcode
さらに細かく制御するには、subcode を次のように指定できます。
FPE_INTDIV |
1 |
整数のゼロ除算 |
FPE_INTOVF |
2 |
整数オーバーフロー |
FPE_FLTDIV |
3 |
浮動小数点のゼロ除算 |
FPE_FLTOVF |
4 |
浮動小数点オーバーフロー |
FPE_FLTUND |
5 |
浮動小数点アンダーフロー |
FPE_FLTRES |
6 |
浮動小数点の不正な結果 |
FPE_FLTINV |
7 |
無効な浮動小数点操作 |
FPE_FLTSUB |
8 |
範囲外の添字 |
stop と catch は無関係であり、stop FPE を使用する場合は ignore FPE も必要であることに注意してください。