4.4.6 デバッグをする
ジョブ定義スクリプトファイルの動作を確認しながらデバッグ実行することをデバッグといいます。
adshexecコマンドの-dオプションの指定に相当します。デバッグをすると,コンソールが表示されます。エラーメッセージはエラーウィンドウに表示されます。
コンソールの内容を確認するためにプロセス終了の直前で停止します。初期化処理や構文解析でエラーがあった場合,プロセス終了前で停止しないでエラーウィンドウにエラーメッセージが表示されます。
デバッグの方法には,次の2種類があります。
方法 |
操作 |
概要 |
---|---|---|
実行 |
[デバッグ]−[ブレークポイントまで実行]メニュー |
ブレークポイントまでの実行スタート,およびリスタートをします。 |
ステップ実行 |
[デバッグ]−[ステップイン]メニュー |
ジョブ定義スクリプトを1行ずつ実行して停止します。関数を呼び出す場合は,その関数の中も1行ずつ実行して停止します。 |
[デバッグ]−[ステップオーバー]メニュー |
ジョブ定義スクリプトを1行ずつ実行して停止します。関数を呼び出す場合,関数の中は1行ずつ停止しませんが,ブレークポイントがあるときは停止します。 |
|
[デバッグ]−[ステップアウト]メニュー |
関数を呼び出した次の行またはブレークポイントで停止します。 |
- 注意事項
ファイル名のないジョブ定義スクリプトファイルに対してデバッグを実行しようとすると,ファイル名を付けて保存するためのダイアログボックスが表示されます。ジョブ定義スクリプトファイル名(.ash)を付けて保存しないと,デバッグは実行できません。
ジョブ定義スクリプトファイルの内容が更新されている場合,ファイルを更新するかどうかを問い合わせるメッセージが表示されます。ファイルを更新するとデバッグが実行できます。
「プログラムの終了」のダイアログで「すぐに終了」を選択したときなど,デバッグ実行中にエディタが強制終了された場合,デバッガのプロセスであるadshesub.exeだけ終了せずに,コンソールを表示し続ける場合があります。その場合,taskkillコマンドまたはタスクマネージャーからadshesub.exeプロセスを終了させてください。
- 〈この項の構成〉
(1) デバッグ実行時のブレークポイントを設定・解除する
デバッグの実行時に,一時的に実行を停止させる位置を設定,または解除します。
JP1/Advanced Shellエディタの場合,カーソルがある行にブレークポイントを設定するため,外部スクリプトには設定できません。事前に外部スクリプトにブレークポイントを設定していても,外部スクリプトのブレークポイントでは停止しません。設定できるブレークポイントの数の上限は999です。
(a) ブレークポイントを設定する
ブレークポイントを設定したい行にカーソルを移動させる。
[デバッグ]−[ブレークポイントの設定]メニューを選択する。
カーソルのある行にブレークポイントが設定されます。ブレークポイントは,行の左側に
で表示されます。ジョブ定義スクリプトは,ブレークポイントを設定した行の先頭(実行前)まで実行して停止します。
(b) 一部のブレークポイントを解除する
ブレークポイントを解除したい行にカーソルを移動させる。
[デバッグ]−[ブレークポイントの解除]メニューを選択する。
カーソルのある行のブレークポイントが解除されます。
(c) すべてのブレークポイントを解除する
ブレークポイントが設定されているジョブ定義スクリプトを表示する。
[デバッグ]−[ブレークポイントをすべて解除]メニューを選択する。
表示されているジョブ定義スクリプトファイルのブレークポイントがすべて解除されます。
- 注意事項
編集モードの場合は,任意の行にブレークポイントを設定できます。デバッグモードの場合,ブレークポイントを設定できるのは,実行対象となっているコマンド,またはステートメント単位に限られます。
実行できない行にブレークポイントが設定されている場合は,デバッグモード開始時に,エディタが自動的に下方向に適切な位置を検索して,そこにブレークポイントを設定します。
ブレークポイントは,999個まで指定できます。
(2) デバッグを実行・中止する
(a) ブレークポイントまで実行する場合
[デバッグ]−[ブレークポイントまで実行]メニューを選択する,またはツールバーの[ブレークポイントまで実行]ボタンをクリックする。
JP1/Advanced Shellエディタがデバッグモードになり,デバッグが始まります。次に実行される行の左側には,実行する位置を示す記号(
)が表示されます。コメント行やスペース行は無視されます。
ブレークポイント(
)を指定している行まで実行されると,実行が一時的に停止されます。
ブレークポイントの設定方法については,「(1) デバッグ実行時のブレークポイントを設定・解除する」を参照してください。
ジョブ定義スクリプトの最後の行まで実行すると,デバッガのプロセスの終了を示す記号(
)が表示されます。
-
実行中のジョブ定義スクリプトを停止させたい場合は,[デバッグ]−[スクリプトの停止]メニューを選択する,またはツールバーの[スクリプトの停止]ボタンをクリックする。
[スクリプトの停止]ボタンをクリックしたときに実行していたコマンドはそのまま実行を続け,次のコマンドの実行に移る前に停止します。
デバッグを中止したい場合は,[デバッグ]−[デバッグの中止]メニューを選択する,またはツールバーの[デバッグの中止]ボタンをクリックする。
メニューを選択した時点で,デバッグが中止され,メッセージを出力して後処理をして終了します。プロセス終了前で停止しないでデバッグを終了します。エディタは編集モードに戻ります。
(b) 1行ずつ実行(関数の中もステップ実行)する場合
[デバッグ]−[ステップイン]メニューを選択する,またはツールバーの[ステップイン]ボタンをクリックする。
エディタがデバッグモードになり,デバッグが始まります。
CUIとは異なって,外部スクリプトを実行する場合,外部スクリプトでは停止しないで,エディタで表示しているジョブ定義スクリプトの次のコマンドで停止します。
デバッグを中止したい場合は,[デバッグ]−[デバッグの中止]メニューを選択する,またはツールバーの[デバッグの中止]ボタンをクリックする。
メニューを選択した時点で,デバッグが中止され,メッセージを出力して後処理をして終了します。なお,プロセス終了前で停止しないでデバッグを終了します。エディタは編集モードに戻ります。
(c) 1行ずつ実行(関数の中はステップ実行しない)する場合
[デバッグ]−[ステップオーバー]メニューを選択する,またはツールバーの[ステップオーバー]ボタンをクリックする。
エディタがデバッグモードになり,デバッグが始まります。
デバッグを中止したい場合は,[デバッグ]−[デバッグの中止]メニューを選択する,またはツールバーの[デバッグの中止]ボタンをクリックする。
メニューを選択した時点で,デバッグが中止され,メッセージを出力して後処理をして終了します。なお,プロセス終了前で停止しないでデバッグを終了します。エディタは編集モードに戻ります。
(d) 関数の終わりまで実行する場合
[デバッグ]−[ステップアウト]メニューを選択する,またはツールバーの[ステップアウト]ボタンをクリックする。
エディタがデバッグモードになり,デバッグが始まります。
(3) デバッグ中に変数値を参照・更新する
変数ウィンドウには,ジョブ定義スクリプト停止時に変数名とその変数の値が更新して表示されます。
変数値領域を選択するとフィールドの値を変更できます。編集中にEscキーを押すことで編集前の値に戻せます。
読み込み専用属性の変数は,変数名および変数値を淡色表示しています。この状態のときには,変数値を変更できません。
整数型として宣言された変数に,整数値以外を設定しようとしたときには,元の値に戻ります。また,空文字列を指定した場合は,0が設定されます。
(4) エラーをシミュレートする
ジョブ定義スクリプト内のすべての実行パスを実行しても,C1実行比率が100%とならない場合があります。この現象は,#-adsh_step_startコマンドのジョブステップに先行するジョブステップまたはエラーとなるコマンドがない場合に発生します。
この場合,#-adsh_step_startコマンド以前に実行する個所でエラーをシミュレートすることで,先行のジョブステップ,またはジョブ定義スクリプトが異常なC1情報を取得することが可能になり,C1実行比率を100%にすることができます。なお,エラー注入モードを有効にした場合のジョブ定義スクリプトの動作は,「6.2.21 エラー注入モードの有効/無効を設定する(joberrmodeコマンド)」を参照してください。
手順を次に示します。
エラーをシミュレートしたい行にカーソルを移動させ,ブレークポイントを設定する。
ブレークポイントの設定方法については,「(1) デバッグ実行時のブレークポイントを設定・解除する」を参照してください。
エラーをシミュレートしたい行までデバッグを実行する。
1.で設定したブレークポイントまでデバッグを実行します。ブレークポイントまで実行するとデバッグの実行が一時的に停止します。デバッグをブレークポイントまで実行する方法については,「(2) デバッグを実行・中止する」を参照してください。
[デバッグ]−[エラー注入モード]メニューを選択する。
[エラー注入モード]メニューは,ブレークポイントなどでジョブ定義スクリプトが停止している場合だけ選択できます。
これによってエラー注入モードが有効になります。
この状態でデバッグを再開することでエラーがシミュレートされ,C1情報が取得されます。
エラー注入モードを解除するには,デバッグを再開する前に[エラー注入モード]メニューを再選択してください。
デバッグを再開する。
ステップイン,ステップオーバー,ステップアウトまたはブレークポイントまで実行することで,エディタがデバッグモードになり,デバッグが再開されます。
ジョブ定義スクリプトの最後の行まで実行が終了すると,エラー注入モードは解除されます。
- 注意事項
-
-
CMDRC_CMDGRP_CHECKパラメーターにFUNCTIONを指定した場合,関数内で停止中に[デバッグ]-[エラー注入モード]を選択しても,エラー注入モードを有効にすることはできません。
-
(5) trapコマンドのアクションを実行する
ジョブコントローラが強制終了要求を受けた場合の動作は,trapコマンドのアクションによって定義できます。デバッグ実行時にtrapコマンドのアクションを実行する方法を次に示します。
デバッグ実行によって,トラップアクションが定義された後の任意の行でジョブ定義スクリプトを停止する。
デバッグ実行の方法については,「(2) デバッグを実行・中止する」を参照してください。
[デバッグ]-[トラップアクションの実行]メニューを選択する。
[トラップアクションの実行]メニューは,ブレークポイントなどでジョブ定義スクリプトが停止している場合にだけ選択できます。
メニュー選択後,ブレークポイントまで実行されます。このとき,次の順序でコマンドが実行されます。
1) 現在停止している位置のコマンドを実行
2) アクション部分のコマンドを実行
3) 1) の後続のコマンドを実行
なお,環境設定パラメーターTRAP_ACTION_SIGTERMにDISABLEを指定している場合,またはtrapコマンドによるアクションの定義がない場合,このメニューを選択してもtrapコマンドのアクションを実行しないでブレークポイントまで実行されます。
- 注意事項
trapコマンドのアクションの実行中に,ジョブ定義スクリプトの実行は停止できません。
この機能によるアクションの実行中にジョブが終了した場合,ジョブを強制終了した場合とは異なり,最後に実行したコマンドの終了コードがジョブの終了コードに反映されます。例えば,この機能を使用して,アクションで「exit 2」を実行した場合,終了コード2でジョブが終了しますが,ジョブを強制終了してアクションで「exit 2」が実行された場合,終了コード1でジョブがエラー終了します。
このメニューを選択した後,直後のコマンドの実行がスキップされる場合※,アクションは実行されません。
注※ 例えば,次に示す場合にコマンドの実行がスキップされます。
・エラー注入モードを有効にする。
・onError属性にstopを指定したジョブステップ内のコマンドがエラー終了する。