exception コマンドでは、デバッグ時にいつでも 例外処理の型を確認できます。オプションなしで exception コマンドを実行するときに表示される型は、dbx 環境変数 output_dynamic_type の設定で制御できます。
この変数を on に設定すると、派生型が表示されます。
この変数を off (デフォルト) に設定すると、静的な型が表示されます。
-d オプションや +d オプションを指定すると、環境変数の設定が無効になります。
-d を設定すると、派生型が表示されます。
+d を設定すると、静的な型が表示されます。
詳細については、「exception コマンド」を参照してください。
スタックを解放する前に、特定の型の例外を阻止または捕獲できます。intercept コマンドを引数を付けずに使用すると、阻止される型がリストで示されます。-all を使用すると、すべての例外が阻止されます。阻止リストに型を追加するには typename を使用します。-x を使用すると、特定の型を除外リストに格納し、阻止から除外することができます。-set を使用すると、阻止リストと除外リストの両方をクリアし、リストを指定した型のみをスローするインターセプトまたは除外に設定できます。
たとえば、int を除くすべての型を阻止するには、次のように入力します。
(dbx) intercept -all -x int |
Error 型の例外を阻止するには、次のように入力します。
(dbx) intercept Error |
CommonError 例外の阻止が多すぎた場合は、次のように入力してその除外を実行することができます。
(dbx) intercept -x CommonError |
intercept コマンド引数なしで入力すると、処理されていない例外および予期で きない例外を含んだ阻止リストが表示されます。これらの例外はデフォルトで阻止され、それに加えてクラス CommonError を除くクラス Error の例外が阻止されます。
(dbx) intercept -unhandled -unexpected class Error -x class CommonError |
Error が例外クラスのものではなく、探している例外クラスの名前が分からない 場合は、次のように入力すると、クラス Error 以外のすべての例外を阻止できます。
(dbx) intercept -all -x Error |
詳細については、「intercept コマンド」を参照してください。
unintercept コマンドは、阻止リストまたは除外リストから例外の型を削除するために使用します。引数を付けずにこのコマンドを使用すると、阻止されている型のリストが示されます (intercept コマンドに同じ)。-all を使用すると、阻止リストからすべての型を削除することができます。typename を使用すると、阻止リストから 1 つの型を削除することができます。-x を使用すると、除外リストから 1 つの型を削除することができます。
詳細については、「unintercept コマンド」を参照してください。
whocatches コマンドは、typename の例外が実行の現時点で送出された場合に、どこで捕獲されるかを報告するものです。このコマンドは、例外がスタックのトップフレームから送出された場合に何が起こるかを検出する場合に使用します。
typename を捕獲した元の送出の行番号、関数名、およびフレーム数が表示されます。捕獲ポイントがスローを行なっている関数と同じ関数内にあると、このコマンドは、「type is unhandled」というメッセージを表示します。
詳細については、「whocatches コマンド」を参照してください。