6.2.5 ウォッチポイントを設定する(watchコマンド)
ウォッチポイントを設定するコマンドは,watchコマンドです。watchコマンドの短縮形は"wa"です。
設定したウォッチポイントには,1から順に番号が割り当てられます。番号割り当てはブレークポイントと共通です。watchコマンドの形式を次に示します。
watch 変数名
watchコマンドの引数には変数名を指定します。指定した変数の値が更新された場合,ジョブ定義スクリプトは次に停止可能なコマンドの前で実行を停止し,ウォッチポイント情報を表示します。
watchコマンドを実行した場合の動作を次に示します。
- watchコマンドの後ろに引数を指定した場合
指定した変数にウォッチポイントを設定します。また,設定したウォッチポイントの情報を表示します。
- watchコマンドの後ろに引数を指定しない場合
エラーメッセージが出力されます。
ウォッチポイントによってジョブ定義スクリプトの実行が停止した場合,ウォッチポイント情報として更新前の値,更新後の値および変数を更新した行の行番号を表示します。表示形式を次に示します。
更新前の値 = 更新前の値 更新後の値 = 更新後の値 行番号 = 行番号
更新前の値:更新される前のウォッチ対象の変数の値です。値がない場合,<No value>と表示します。
更新後の値:更新されたあとのウォッチ対象の変数の値です。値がない場合,<No value>と表示します。
行番号:変数を更新した行の行番号です。trapコマンドのactionを実行中の場合は,<Trap action>と表示します。ジョブ定義スクリプト終端の場合,<EOF>と表示します。
- 注意事項
変数名に配列を指定する場合は,要素ごとに指定します。
例
通常の変数指定:aaa
配列指定:aaa[1]またはaaa[0][1]
変数とその配列の0番目(例:aaa,aaa[0],およびaaa[0][0])は同じです。ただし,ウォッチポイントはそれぞれに設定できます。
変数名に$を付けると変数名として認識されません。
引数に変数名を指定する段階では,指定した変数が存在するかどうかは判断しません。
変数の命名規則から外れた変数名を指定した場合,エラーメッセージが出力されます。
更新前の変数の値と同じ値が代入された場合でも,ウォッチポイントとして停止します。
シェル標準コマンドのtypesetコマンドを使用して変数の値を文字列型から整数型に変更した場合,または整数型から文字列型に変更した場合,ウォッチポイントとして停止します。
関数名と変数名の命名規則が同じため,引数に関数名を指定するとウォッチポイントとして設定できます。ただし,設定した関数名と同名の変数の値が更新されないかぎり,ジョブ定義スクリプトの実行は停止しません。
1行に複数のコマンドがあり,ウォッチ対象の変数の値が更新された場合,同じ行であっても次に停止できるコマンドの前で停止します。
設定できるブレークポイントとウォッチポイントの番号を合わせて上限は999です。合計数が上限の999に達してから新たにブレークポイントまたはウォッチポイントを設定したい場合は,デバッガをいったん終了してください。上限値に達した場合,deleteコマンドでブレークポイントやウォッチポイントを削除しても,設定できません。
ジョブ定義スクリプトが停止しているときにsetコマンドでウォッチ対象の変数の値を変更し,ジョブ定義スクリプトの実行を再開すると,次に停止できるコマンドの前で実行を停止します。
同一の変数に設定できるウォッチポイントの数は1個です。ウォッチポイントとして設定済みの変数は,ウォッチポイントとして設定できません。
次のコマンドでウォッチ対象の変数の値が更新された場合,ジョブ定義スクリプトの実行は停止しません。
・バックグラウンドで実行したコマンド(&または|&)
・パイプで連結したコマンド
・「(」「)」で囲んでコマンドのグループ化をしたコマンド群
・外部コマンドのように別プロセスで実行されるコマンド
例
1: a=1 &
2: b=2
3: c=3
上記の例で変数aにウォッチポイントを設定し,ジョブ定義スクリプトを実行した場合,代入式「a=1」はバックグラウンドで実行されるため,ジョブ定義スクリプトの実行は停止しません。
- 使用例
次のジョブ定義スクリプトに対して「watch b」と指定すると,変数bにウォッチポイントを設定できます。
1: echo "start" 2: a=1 3: b=5 4: c=10 5: echo "end"
その後,ジョブ定義スクリプトを実行して代入式「b=5」が実行されると,ウォッチポイント情報を表示し,4行目の「c=10」の実行前で停止します。
KNAX7023-I ウォッチポイント "1": 変数名 "b" 更新前の値 = <No value> 更新後の値 = 5 行番号 = 3 KNAX7032-I ジョブ定義スクリプトファイル("test.ash")の中で実行を停止しました。 4: c=10 現在位置: c=10 (adshdb)