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 コマンドの実行時にデストラクタを呼び出すための呼び出し。
すべての内部呼び出し。