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

関数を呼び出す

プログラムが停止しているとき、dbx コマンド call を使用して関数を呼び出すことができます。このコマンドでは、被呼び出し側関数に渡す必要のあるパラメータの値を指定することもできます。

関数 (手続き) を呼び出すには、関数の名前を入力し、その引数を指定します。次に例を示します。


(dbx) call change_glyph(1,3)

パラメータは省略できますが、関数名 function_name のあとには必ず括弧を入力してください。次に例を示します。


(dbx) call type_vehicle()

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

C++ 仮想関数は、print コマンドや call コマンド (print コマンド」または call コマンド」を参照) を使用するその他の関数、または関数呼び出しを実行するその他のコマンドと同様に呼び出すことができます。

関数が定義されているソースファイルが -g フラグでコンパイルされたものであるか、プロトタイプ宣言が現在のスコープで可視であれば、dbx は引数の数と型をチェックし、不一致があったときはエラーメッセージを出します。それ以外の場合、dbx は引数の数をチェックしません。

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

C++ の場合、dbx はデフォルト引数と関数の多重定義も処理します。可能であれば、C++ 多重定義関数の自動解析が行われます。関数を特定できない場合は (関数が -g でコンパイルされていない場合など)、多重定義名のリストが表示されます。

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

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