浮動小数点の計算が必要なコードを扱っている場合には、プログラム内で発生した例外をデバッグしなければならないことがよくあります。オーバーフローやゼロ除算などの浮動小数点例外が発生すると、例外を起こした演算の結果としてシステムが「適正な」答を返します。適正な答が返されることで、プログラムは正常に実行を続けることができます (Solaris 2.x コンピュータは、IEEE 標準のバイナリ浮動小数点演算定義の、例外に対する「適正 (reasonable) な」答を実装しています)。
浮動小数点例外に対して適正な答を返すため、例外によって自動的に SIGFPE シグナルが生成されることはありません。
例外の原因を見つけ出すためには、例外によって SIGFPE シグナルが生成されるように、トラップハンドラをプログラム内で設定する必要があります (トラップハンドラの例については、ieee_handler(3m) を参照)。ieee_handler を使用してトラップハンドラを設定すると、ハードウェア浮動小数点状態レジスタ内のトラップ許可マスクがセットされます。このトラップ許可マスクにより、実行中に例外が発生すると SIGFPE シグナルが生成されます。
トラップハンドラ付きのプログラムをコンパイルした後、そのプログラムを dbx に読み込んでください。ここで、SIGFPE が捕捉されるようにするには、dbx のシグナル捕捉リスト (catch リスト) に FPE を追加する必要があります。次のコマンドを使用します。
(dbx) catch FPE
FPE はデフォルトでは ignore リストに含まれています。
FPE を catch リストに追加後、dbx でプログラムを実行します。トラップしている例外が発生すると SIGFPE が生成され、dbx はプログラムを停止します。ここで、呼び出しスタックを (dbx コマンド where を使用して) トレースすることにより、プログラムの何行目で例外が発生したかを調べることができます。
詳細と例については、浮動小数点に関するマニュアルである『数値計算ガイド』を参照してください。