次: , 前: Backtrace, 上: Stack


6.3 フレームの選択

スタックやユーザ・プログラム内の他のデータを調べるためのほとんどのコマンドは、 それが実行された時点において選択されているスタック・フレーム上で動作します。 以下に、 スタック・フレームを選択するためのコマンドを列挙します。 どのコマンドも、 それによって選択されたスタック・フレームに関する簡単な説明を最後に表示します。

frame n
f n
番号nのフレームを選択します。 最下位の (現在実行中の) フレームが番号0のフレーム、 最下位のフレームを呼び出したフレームが番号1のフレーム、 以下同様となります。 最も大きい番号を持つフレームはmainのフレームです。
frame addr
f addr
アドレスaddrのフレームを選択します。 スタック・フレームの連鎖がバグのために破壊されてしまって、 GDBがすべてのフレームに正しく番号を割り当てられないような場合に、 この方法が役に立ちます。 さらに、 ユーザ・プログラムが複数のスタックを持ち、 スタックの切り替えを行うような場合にも有効です。

SPARCアーキテクチャでは、 フレームを任意に選択するには、 フレーム・ポインタ、 スタック・ポインタの2つのアドレスをframeに指定する必要があります。

MIPS、 Alphaの両アーキテクチャでは、 スタック・ポインタ、 プログラム・カウンタの2つのアドレスが必要です。

29kアーキテクチャでは、 レジスタ・スタック・ポインタ、 プログラム・カウンタ、 メモリ・スタック・ポインタの3つのアドレスが必要です。


up n
スタックをnフレームだけ上へ移動します。 nが正の値の場合、 最上位のフレームに向かって移動します。 これは、 より大きいフレーム番号を持ち、 より長く存在しているフレームへの移動です。 nのデフォルト値は、 0です。


down n
スタックをnフレームだけ下へ移動します。 nが正の値の場合、 最下位のフレームに向かって移動します。 これは、 より小さいフレーム番号を持ち、 より最近作成されたフレームへの移動です。 nのデフォルト値は1です。 downの省略形はdoです。

これらのコマンドはいずれも、 最後にフレームに関する情報を2行で表示します。 1行めには、 フレーム番号、 関数名、 引数、 ソース・ファイル名、 そのフレーム内において実行停止中の行番号が表示されます。 2行めには、 実行停止中のソース行が表示されます。

以下に、 例を示します。

     (gdb) up
     #1  0x22f0 in main (argc=1, argv=0xf7fffbf4, env=0xf7fffbfc)
         at env.c:10
     10              read_input_file (argv[i]);

この情報が表示された後で、 listコマンドを引数なしで実行すると、 フレーム内で実行停止中の行を中心に10行のソース行が表示されます。 See Printing source lines

up-silently n
down-silently n
これら2つのコマンドは、 それぞれ、 upコマンド、 downコマンドの変種です。 相違点は、 ここに挙げた2つのコマンドが、 新しいフレームに関する情報を表示することなく実行されるという点にあります。 これらは、 情報の出力が不必要で邪魔ですらある、 GDBのコマンド・スクリプトの中での使用を主に想定したものです。