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

印刷ビューの終了

更新: 2015 年 1 月
 
 

関数の呼び出し

プログラムが停止された場合は、dbxcall コマンドを使用して関数を呼び出すことができます。このコマンドは、呼び出された関数に渡す必要のあるパラメータの値を受け入れます。

手続きを呼び出すには、関数の名前を入力し、そのパラメータを指定します。 例:

(dbx) call change_glyph(1,3)

パラメータはオプションですが、関数名のあとに括弧を入力する必要があります。例:

(dbx) call type_vehicle()

call コマンドを使用して関数を明示的に呼び出したり、関数呼び出しを含む式を評価するか、または stop in glyph -if animate() などの条件付き修飾子を使用することによって関数を暗黙的に呼び出したりすることができます。

C++ 仮想機能は、print コマンドか call コマンド、または関数呼び出しを実行するその他の任意のコマンドを使用することにより、ほかのすべての関数と同様に呼び出すことができます。

C++ の場合、dbx はデフォルト引数と関数の多重定義も処理します。可能であれば、C++ 多重定義関数の自動解析が行われます。何らかのあいまいさが残る (たとえば、関数が –g でコンパイルされていない) 場合は、dbx によって、多重定義された名前のリストが表示されます。

関数が定義されているソースファイルが –g オプションでコンパイルされた場合、またはプロトタイプ宣言が現在のスコープで可視である場合、dbx は引数の数と型をチェックし、不一致があればエラーメッセージを発行します。それ以外の場合、dbx はパラメータの数をチェックせずに呼び出しを続行します。

デフォルトでは、call コマンドが実行されるたびに、dbxfflush(stdout) を自動的に呼び出して、入出力バッファー内に格納されているすべての情報が確実に出力されるようにします。 自動的なフラッシュを無効にするには、dbxenv 変数 output_auto_flushoff に設定します。

call を使用すると、dbxnext のように動作し、被呼び出し側から戻ります。しかし、プログラムが被呼び出し側関数でブレークポイントにあたると、dbx はそのブレークポイントでプログラムを停止し、メッセージを表示します。次に、where コマンドを入力すると、スタックトレースに dbx コマンドのレベルから発生した呼び出しが示されます。

実行を継続すると、呼び出しは正常に戻ります。強制終了、実行、再実行、デバッグを行おうとすると、dbx は入れ子になったインタプリタから回復しようとするので、コマンドが異常終了します。そのあと、そのコマンドを再発行できます。あるいは、pop –c コマンドを使用して、すべてのフレームをデバッガから実行された最新の呼び出しまでポップすることもできます。