Oracle Solaris Studio 12.2: dbx コマンドによるデバッグ

例外処理コマンド

exception [-d | +d] コマンド

exception コマンドでは、デバッグ時にいつでも 例外処理の型を確認できます。オプションなしで exception コマンドを実行するときに表示される型は、dbx 環境変数 output_dynamic_type の設定で制御できます。

-d オプションや +d オプションを指定すると、環境変数の設定が無効になります。

詳細については、exception コマンド」を参照してください。

intercept [-all] [-x] [-set] [typename] コマンド

スタックを解放する前に、特定の型の例外を阻止または捕獲できます。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 [-all] [-x] [typename] コマンド

unintercept コマンドは、阻止リストまたは除外リストから例外の型を削除するために使用します。引数を付けずにこのコマンドを使用すると、阻止されている型のリストが示されます (intercept コマンドに同じ)。-all を使用すると、阻止リストからすべての型を削除することができます。typename を使用すると、阻止リストから 1 つの型を削除することができます。-x を使用すると、除外リストから 1 つの型を削除することができます。

詳細については、unintercept コマンド」を参照してください。

whocatches typename コマンド

whocatches コマンドは、typename の例外が実行の現時点で送出された場合に、どこで捕獲されるかを報告するものです。このコマンドは、例外がスタックのトップフレームから送出された場合に何が起こるかを検出する場合に使用します。

typename を捕獲した元の送出の行番号、関数名、およびフレーム数が表示されます。捕獲ポイントがスローを行なっている関数と同じ関数内にあると、このコマンドは、「type is unhandled」というメッセージを表示します。

詳細については、whocatches コマンド」を参照してください。