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行ずつ実行(関数の中もステップ実行)する場合
-
[デバッグ]−[ステップイン]メニューを選択する,またはツールバーの[ステップイン]ボタンをクリックする。
エディタがデバッグモードになり,デバッグが始まります。次に実行される行の左側には,実行する位置を示す記号(
)が表示されます。コメント行やスペース行は無視されます。関数の中も1行ずつ実行します。ジョブ定義スクリプトの最後の行まで実行すると,デバッガのプロセスの終了を示す記号(
)が表示されます。
CUIとは異なって,外部スクリプトを実行する場合,外部スクリプトでは停止しないで,エディタで表示しているジョブ定義スクリプトの次のコマンドで停止します。
-
デバッグを中止したい場合は,[デバッグ]−[デバッグの中止]メニューを選択する,またはツールバーの[デバッグの中止]ボタンをクリックする。
メニューを選択した時点で,デバッグが中止され,メッセージを出力して後処理をして終了します。なお,プロセス終了前で停止しないでデバッグを終了します。エディタは編集モードに戻ります。
(c) 1行ずつ実行(関数の中はステップ実行しない)する場合
-
[デバッグ]−[ステップオーバー]メニューを選択する,またはツールバーの[ステップオーバー]ボタンをクリックする。
エディタがデバッグモードになり,デバッグが始まります。次に実行される行の左側には,実行する位置を示す記号(
)が表示されます。コメント行やスペース行は無視されます。ジョブ定義スクリプトの最後の行まで実行すると,デバッガのプロセスの終了を示す記号(
)が表示されます。
CUIとは異なって,外部スクリプトを実行する場合,外部スクリプトでは停止しないで,エディタで表示しているジョブ定義スクリプトの次のコマンドで停止します。
-
デバッグを中止したい場合は,[デバッグ]−[デバッグの中止]メニューを選択する,またはツールバーの[デバッグの中止]ボタンをクリックする。
メニューを選択した時点で,デバッグが中止され,メッセージを出力して後処理をして終了します。なお,プロセス終了前で停止しないでデバッグを終了します。エディタは編集モードに戻ります。
(d) 関数の終わりまで実行する場合
-
[デバッグ]−[ステップアウト]メニューを選択する,またはツールバーの[ステップアウト]ボタンをクリックする。
エディタがデバッグモードになり,デバッグが始まります。次に実行される行の左側には,実行する位置を示す記号(
)が表示されます。コメント行やスペース行は無視されます。ジョブ定義スクリプトの最後の行まで実行すると,デバッガのプロセスの終了を示す記号(
)が表示されます。
CUIとは異なって,関数に入っていない状態でも,ジョブ定義スクリプトの終わりまでジョブ定義スクリプトを実行します。ただし,関数をリターンするまでにブレークポイントがある場合は停止します。
-
実行中のジョブ定義スクリプトを停止させたい場合は,[デバッグ]−[スクリプトの停止]メニューを選択する,またはツールバーの[スクリプトの停止]ボタンをクリックする。
[スクリプトの停止]ボタンをクリックしたときに実行していたコマンドはそのまま実行を続け,次のコマンドの実行に移る前に停止します。
-
デバッグを中止したい場合は,[デバッグ]−[デバッグの中止]メニューを選択する,またはツールバーの[デバッグの中止]ボタンをクリックする。
メニューを選択した時点で,デバッグが中止され,メッセージを出力して後処理をして終了します。なお,プロセス終了前で停止しないでデバッグを終了します。エディタは編集モードに戻ります。
(e) デバッグ実行時のエラーウィンドウ,ウォッチウィンドウおよびコンソール
-
エラーウィンドウ
デバッグで検出された解析エラーや実行エラーは,エラーウィンドウに表示されます。また,ウォッチウィンドウに追加されている変数の値は,実行停止時に更新されて,表示されます。
エラーウィンドウについては,「4.7.4 エラーウィンドウ」を参照してください。
-
ウォッチウィンドウ
ウォッチウィンドウに表示される変数の値は,ジョブ定義スクリプト停止時に更新して表示されます。ウォッチウィンドウを表示したい場合は,ジョブ定義スクリプト停止中に[表示]−[ウォッチウィンドウを表示]メニューを選択する,またはツールバーの[ウォッチウィンドウを表示]ボタンをクリックしてください。このメニューは,ジョブ定義スクリプト停止中にだけ選択できます。また,ウォッチウィンドウで変数名をダブルクリックすると[値の更新]ダイアログボックスが表示されます。[値の更新]ダイアログボックスは,変数名の値を更新できます。
ウォッチウィンドウについては,「4.7.6 ウォッチウィンドウ」を,[値の更新]ダイアログボックスの設定方法については,「4.7.8 値の更新ダイアログボックス」を参照してください。
-
コンソール
デバッグ実行時に標準出力,標準エラー出力およびジョブ実行ログ相当の情報はコンソールに表示されます。コンソールは,ジョブ定義スクリプトを実行するプロセスが動作している間は表示され,プロセスが終了すると閉じます。ジョブ定義スクリプト実行中はコンソールがアクティブになり,ジョブ定義スクリプト停止時にエディタがアクティブになります。
(3) ウォッチへ変数を追加する
ウォッチウィンドウに指定した変数を追加します。
-
デバッグモードで,[デバッグ]−[ウォッチへ変数の追加]メニューを選択する。
[変数の追加]ダイアログボックスが表示されます。
ダイアログボックスの設定方法については,「4.7.7 変数の追加ダイアログボックス」を参照してください。
-
追加したい変数の名前を入力する。
入力できるのは99バイトまでです。これを超えた変数名を入力できません。
-
[追加]ボタンをクリックする。
入力した変数の名前がウォッチウィンドウに追加されます。
-
[キャンセル]ボタンをクリックする。
[変数の追加]ダイアログボックスが閉じます。
-
デバッグモードで,JP1/Advanced Shellエディタウィンドウのクライアントエリアで文字列を選択してから[デバッグ]−[ウォッチへ変数の追加]メニューを選択すると,選択した文字列が「変数名」に表示されます。
-
追加した変数をウォッチウィンドウから削除する場合は,変数名を右クリックし,[変数名の削除]メニューを選択します。
(4) エラーをシミュレートする
ジョブ定義スクリプト内のすべての実行パスを実行しても,C1実行比率が100%とならない場合があります。この現象は,#-adsh_step_startコマンドのジョブステップに先行するジョブステップまたはエラーとなるコマンドがない場合に発生します。
この場合,#-adsh_step_startコマンド以前に実行する個所でエラーをシミュレートすることで,先行のジョブステップ,またはジョブ定義スクリプトが異常なC1情報を取得することが可能になり,C1実行比率を100%にすることができます。なお,エラー注入モードを有効にした場合のジョブ定義スクリプトの動作は,「6.2.20 エラー注入モードの有効/無効を設定する(joberrmodeコマンド)」を参照してください。
手順を次に示します。
-
エラーをシミュレートしたい行にカーソルを移動させ,ブレークポイントを設定する。
ブレークポイントの設定方法については,「(1) デバッグ実行時のブレークポイントを設定・解除する」を参照してください。
-
エラーをシミュレートしたい行までデバッグを実行する。
1.で設定したブレークポイントまでデバッグを実行します。ブレークポイントまで実行するとデバッグの実行が一時的に停止します。デバッグをブレークポイントまで実行する方法については,「(2) デバッグを実行・中止する」を参照してください。
-
[デバッグ]−[エラー注入モード]メニューを選択する。
[エラー注入モード]メニューは,ブレークポイントなどでジョブ定義スクリプトが停止している場合だけ選択できます。
これによってエラー注入モードが有効になり,[エラー注入モード]メニューの左側には次のように「レ」が表示されます。
この状態でデバッグを再開することでエラーがシミュレートされ,C1情報が取得されます。
エラー注入モードを解除するには,デバッグを再開する前に[エラー注入モード]メニューを再選択してください。
-
デバッグを再開する。
ステップイン,ステップオーバー,ステップアウトまたはブレークポイントまで実行することで,エディタがデバッグモードになり,デバッグが再開されます。
ジョブ定義スクリプトの最後の行まで実行が終了すると,エラー注入モードは解除されます。
(5) trapコマンドのアクションを実行する
ジョブコントローラが強制終了要求を受けた場合の動作は,trapコマンドのアクションによって定義できます。デバッグ実行時にtrapコマンドのアクションを実行する方法を次に示します。
-
デバッグ実行によって,トラップアクションが定義された後の任意の行でジョブ定義スクリプトを停止する。
デバッグ実行の方法については,「(2) デバッグを実行・中止する」を参照してください。
-
[デバッグ]-[トラップアクションの実行]メニューを選択する。
[トラップアクションの実行]メニューは,ブレークポイントなどでジョブ定義スクリプトが停止している場合にだけ選択できます。
メニュー選択後,ブレークポイントまで実行されます。このとき,次の順序でコマンドが実行されます。
1) 現在停止している位置のコマンドを実行
2) アクション部分のコマンドを実行
3) 1) の後続のコマンドを実行
なお,環境設定パラメーターTRAP_ACTION_SIGTERMにDISABLEを指定している場合,またはtrapコマンドによるアクションの定義がない場合,このメニューを選択してもtrapコマンドのアクションを実行しないでブレークポイントまで実行されます。
- 注意事項
-
-
trapコマンドのアクションの実行中に,ジョブ定義スクリプトの実行は停止できません。
-
この機能によるアクションの実行中にジョブが終了した場合,ジョブを強制終了した場合とは異なり,最後に実行したコマンドの終了コードがジョブの終了コードに反映されます。例えば,この機能を使用して,アクションで「exit 2」を実行した場合,終了コード2でジョブが終了しますが,ジョブを強制終了してアクションで「exit 2」が実行された場合,終了コード1でジョブがエラー終了します。
-
このメニューを選択した後,直後のコマンドの実行がスキップされる場合※,アクションは実行されません。
注※ 例えば,次に示す場合にコマンドの実行がスキップされます。
・エラー注入モードを有効にする。
・onError属性にstopを指定したジョブステップ内のコマンドがエラー終了する。
-