dbx コマンドによるデバッグ ホーム目次前ページへ次ページへ索引


第 7 章

呼び出しタックの使用

この章では、dbx による呼び出しスタックの使用方法と、呼び出しスタックを処理するときの wherehide、および unhide コマンドの使用方法について説明します。

呼び出しスタックは、現在活動中のルーチン、すなわち、呼び出されているがそれぞれの呼び出し側に戻っていない関数群を表します。

呼び出しスタックがメモリー上位からメモリー下位に成長することから、「上に移動する」(up) はメモリーを上位に移動して呼び出し側に向かうこと、「下に移動する」(down) はメモリー内を下位に移動することを意味します。プログラムの現在位置 (ブレークポイント、ステップ実行の後、プログラムが異常終了してコアファイルが作成された、のいずれかの時点で実行されていたルーチン) はメモリー上位に存在しますが、main() のような呼び出し側ルーチンはメモリー下位に位置します。

この章は次の各節から構成されています。

スタック上での現在位置の検索

where コマンドを使用すると、スタックでの現在位置を検索できます。

where [-f] [-h] [-q] [-v] number_id

where コマンドは、クラッシュしてコアファイルを作成したプログラムの状態を知る場合にも役立ちます。プログラムがクラッシュしてコアファイルを作成した場合、そのコアファイルを dbx に読み込むことができます。(「既存のコアファイルのデバッグ」、および Sun WorkShop オンラインヘルプの「dbx コマンドの使い方」の「dbx によるコアファイルのデバッグ」を参照。)

where コマンドについての詳細は、Sun WorkShop オンラインヘルプの「dbx コマンドの使い方」の「where コマンド」を参照してください。

スタックを移動してホームに戻る

スタックを上下に移動して関数を表示すると、dbx はスタックの状態を表示し、矢印でその関数を示します。プログラムが停止している位置を「ホーム」と呼び、このホームを起点にし、up コマンド、down コマンド、frame コマンドを使用してスタックを上下に移動することができます。

dbx コマンドの up および down は、ともに引数として、スタック内で現在のフレームから移動するフレームの数を指定する値 (number) を受け付けます。number を指定しない場合、デフォルトは 1 です。-h オプションを指定すると、隠されたフレームもカウントされます。

スタックを上下に移動する

現在の関数以外の関数にあるローカル変数を調べることができます。

スタックの上方向への移動

呼び出しスタックを number で指定されたレベル分、上に (main に向かって) 移動するには、次のように入力します。

up [-h] number

詳細については、Sun WorkShop オンラインヘルプの「dbx コマンドの使い方」の「up コマンド」を参照してください。

スタックの下方向への移動

呼び出しスタックを number で指定されたレベル分、下に (現在の停止点に向かって) 移動するには、次のように入力します。

down [-h] number

詳細については、Sun WorkShop オンラインヘルプの「dbx コマンドの使い方」の「down コマンド」を参照してください。

「デバッグ」ウィンドウで呼び出しスタックの周りを移動することもできます (Sun WorkShop オンラインヘルプの「デバッグウィンドウの使い方」の「呼び出しスタック内の移動」を参照してください)。

特定フレームへの移動

frame コマンドは、up コマンドや down コマンドと同じような働きをします。このコマンドに where コマンドで得た番号を指定すると、その番号によって特定されるフレームに直接移動できます。このコマンドは、コマンド行でしか実行できません。

frame
frame -h
frame [-h] number
frame [-h] +number
frame [-h] -number

引数なしの frame コマンドは、現在のフレーム番号を出力します。number を指定すると、その番号によって示されるフレームに直接移動できます。"+" または "-" だけを指定すると、現在のフレームから 1 レベルだけ上 (+) または下 (-) に移動できます。また、正負の符号と number をともに指定すると、指定した数のレベルだけ上または下に移動できます。-h オプションをつけると、隠されたフレームもカウントされます。

pop コマンドを使用するか (「呼び出しスタックのポップ」参照)、または 「デバッグ」ウィンドウを使用して (Sun WorkShop オンラインヘルプの「デバッグウィンドウの使い方」の「現在のフレームへの呼び出しスタックのポップ」参照)、特定のフレームへ移動することもできます。

呼び出しスタックのポップ

呼び出しスタックから、停止した関数を削除し、呼び出し中の関数を新たに指定関数で停止する関数にすることができます。

呼び出しスタックの上下方向への移動とは異なり、スタックのポップは、プログラムの実行を変更します。スタックから停止した関数が削除されると、プログラムは以前の状態に戻ります。ただし、大域または静的変数、外部ファイル、共有メンバー、および同様のグローバル状態への変更は対象外です。

pop コマンドは、呼び出しスタックから 1 つまたは複数のフレームを削除します。たとえば、スタックから 5 つのフレームをポップするには、次のように入力します。

pop 5

指定のフレームへポップすることもできます。フレーム 5 へポップするには、次のように入力します。

pop -f 5

詳細については、Sun WorkShop オンラインヘルプの「dbx コマンドの使い方」の「pop コマンド」を参照してください。

「デバッグ」ウィンドウで、呼び出しスタックをポップすることもできます。詳細については、Sun WorkShop オンラインヘルプの「デバッグウィンドウの使い方」の「一度に 1 つの関数ずつ呼び出しスタックをポップする」、「現在のフレームへの呼び出しスタックのポップ」、「呼び出しスタックからのデバッガフレームのポップ」を参照してください。

スタックフレームを隠す

hide コマンドを使用して、現在有効なスタックフレームフィルタをリスト表示します。

正則表現に一致するすべてのスタックフレームを隠すか、または削除するには、次のように入力します。

hide [ regular_expression ]

regular_expression は、関数名、またはロードオブジェクト名のいずれかを表し、sh または ksh の正規表現スタイルをとります。

すべてのスタックフレームフィルタを削除するには、unhide を使用します。

unhide 0

hide コマンドは、番号とともにフィルタをリスト表示するため、このフィルタ番号を使用して unhide コマンドを使用することもできます。

unhide [ number | regular_expression ]


サン・マイクロシステムズ株式会社
Copyright information. All rights reserved.
ホーム   |   目次   |   前ページへ   |   次ページへ   |   索引