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

印刷ビューの終了

更新: 2015 年 1 月
 
 

呼び出しの安全性

call コマンドを使用するか、または呼び出しを含む式を出力することによってデバッグ対象のプロセスを呼び出すと、すぐには現れない重大な障害が発生する可能性があります。例:

  • 呼び出しが無限ループに入る可能性があります。これは中断できますが、中断しないと、セグメント例外が発生します。多くの場合は、pop –c コマンドを使用して、呼び出しの場所に戻ることができます。

  • マルチスレッドアプリケーションで呼び出しを行うと、デッドロックを回避するためにすべてのスレッドが再開されるため、呼び出しを行なったスレッド以外のスレッドで副作用が現れる可能性があります。

  • ブレークポイント条件で使用された呼び出しによって、イベント管理が混乱する可能性があります (実行の再開を参照)。

    dbx によって行われる一部の呼び出しは、安全に実行されます。通常の Stopped with call to ... ではなく問題 (通常はセグメント例外) が検出された場合、dbx は次のいずれかのアクションを実行します。

  • メモリーアクセスエラーの検出によって発生したコマンドを含む、すべての stop コマンドを無視します。

  • pop -c コマンドを自動的に発行して、呼び出しの場所に戻ります。

  • 実行を継続します。

    dbx は、次の状況では安全な呼び出しを使用します。

  • display コマンドによって出力される式の中で発生した呼び出し。失敗した呼び出しは、ic0->get _data() = <call failed> と表示されます。

    このような失敗を診断するには、print コマンドを使用して、式を出力します。

  • print -p コマンドを使用する場合を除く、db_pretty_print() 関数の呼び出し。

  • イベント条件式で使用する呼び出し。呼び出しが失敗した条件は false と評価されます。

  • pop コマンドの実行時にデストラクタを呼び出すための呼び出し。

  • すべての内部呼び出し。