Hitachi

JP1 Version 11 JP1/Advanced Shell 


6.2.24 バックトレースを表示する(whereコマンド)

バックトレースとは,実行中のジョブ定義スクリプトが現在停止している位置にどのようにして到達したかを示す情報です。バックトレースは,各フレームによって表現されます。フレームとは,ある関数に対する1回の呼び出しに関連するデータのことです。関数を呼び出すとフレームは1個追加され,関数を終了するとフレームは1個削除されます。各フレームに,最も内側のフレームから順に番号を0から割り当てます。最も内側のフレームとは,現在実行中の関数のことです。バックトレースを表示するコマンドは,whereコマンドです。whereコマンドの短縮形は"whe"です。whereコマンドの形式を次に示します。

where[ フレーム番号

引数にフレームの番号を指定すると,最も内側のフレームから指定した番号までの間で存在するフレームの情報を表示します。引数を省略すると,すべてのフレーム情報を内側のフレームから表示します。表示形式を次に示します。

Num  Function  File:Line
フレーム番号  関数名  ファイル名:行番号

whereコマンドを実行した場合の動作を次に示します。

whereコマンドの後ろに引数を指定しない場合

ジョブ定義スクリプトが実行中で停止している状態でwhereコマンドを実行すると,すべてのフレーム情報を内側のフレームから順に表示します。

ジョブ定義スクリプトが実行されていないときは,エラーメッセージが出力されます。

whereコマンドの後ろに引数を指定した場合

ジョブ定義スクリプトが実行されている状態でwhereコマンドを実行すると,正しいフレーム番号を指定したときは,内側のフレームから指定したフレーム番号までのフレーム情報を表示します。

番号以外を指定したときおよびジョブ定義スクリプトが実行されていないときは,エラーメッセージが出力されます。

注意事項
  • フレーム番号は0以上の整数を入力してください。先頭に「+」は付けません。

  • フレーム番号にint型の範囲を超えた数値を入力した場合,int型の上限値に丸めて扱います。

  • 表示できるフレーム数の上限は255個です。引数に255以上の番号を入力してもそれ以上の番号のフレームは表示されません。256個以上フレームが存在する場合は,フレーム情報の下にメッセージが表示されます。

使用例

sample.ashの12行目でfuncAを呼び出し,そのあと9行目でfuncBを呼び出してtest.ashの12行目で停止しているときに,whereコマンドを実行します。

sample.ash

5: #-adsh_script test.ash
6:
7: funcA(){
8:   num=10
9:   funcB
10: }
11:
12: funcA

test.ash

10: funcB(){
11:   val=5
12:   num=20
13: }
Num  Function               File:Line
0    funcB (in sample.ash)  test.ash:12
1    funcA (in sample.ash)  sample.ash:9
2    <main>                 sample.ash:12