サポート

前回ではスクリプトでSPSSを操作する際の手順を説明した後、F5 , F8 , F9 キーを使用して、スクリプトの動作をご覧いただきました。スクリプトでSPSSを制御する考え方自体が決して難しくないことがおわかりいただけたと思います。

今回は、スクリプトを実行するにあたって、避けてとおれない「デバッグ」についてお話します。デバッグとは、バグを取ることを意味します。バグとは、プログラムに潜む不具合を言います。
語源については下記を参照してください。
http://www2s.biglobe.ne.jp/~hig/q_a/Misc_QA02.html#Q10

脱線してしまいますが、コンピューターの起源です。
http://www.wizforest.com/OldGood/eniac/

バグの原因は、たいてい人間の不注意です。きちんとテスト・デバッグすれば、ほとんどのバグはなくなります。

デバッグの実践その1

sample_data.savsample_data.csvsample.sbscommon_script.sbs をダウンロードしてください。動作しない場合、sample.sbs の中の'$Include: 句とCS_DATA_FILE_NM 句を適切なパスに書き換えてください。

sampleのダウンロード

デバッグで使用するキーは以下の3つです。
・F5 実行キー
・F8 ステップ実行
・F9 ブレイクポイントの設定

スクリプトをダブルクリックして開いてください。
スクリプトを実行する前は、このようになっています。

クリックすると拡大します  画面をクリックすると拡大します。 

この時点で F5 を押すと、そのまま最後まで実行してしまいます。
途中で止めたいので、適当な行にカーソルを合わせて F9 を押してください。このようになります。

クリックすると拡大します  画面をクリックすると拡大します。 

なお、空白行、コメント行、Dim 句や、 Private Sub 句などでは、ブレイクポイントの設定はできません。では、F5を押して実行してみてください。このようになります。

クリックすると拡大します  画面をクリックすると拡大します。 
F9 を押した行まで一気に実行し、そこで止まります。「設定した行まで実行し、そこで止める」のが F9 キーの機能です。F5 を押して、そのまま実行して終了させてください。再び、F9 キーで、ブレイクポイントを設定します。今度は2つです。
クリックすると拡大します  画面をクリックすると拡大します。 
F5 を押して実行してください。一度、OpenFile のところで止まります。もう一度、F5 を押して実行してください。再び、GetTextDataのところで止まります。このように複数ブレイクポイントを設定することも可能です。 では、ここで F8 を押してください。このようになります。
クリックすると拡大します  画面をクリックすると拡大します。 

スクリプトを一行ずつ実行します。この例では、common_scriptの GetTextData にブレイクポイントを設定し、F8 を押したので、common_script の GetTextData に移っています。同一ファイルであっても、別ファイルであっても、F8 キーを押すことで、ユーザーが作成した関数の内部に入ることができます。ここで、F5 を押して、そのまま実行して終了させてください。
まとめ1

・F5 スクリプトのスタート
・F8 スクリプトの1行単位での実行
・F9 スクリプトの動作をストップする個所を設定F5 と F8 と F9 を使えば、処理を任意の個所まで実行・ストップさせられます。

が、それだけではちょっと面倒なことがあります。

便利な小技が

ステップオーバー(shift+F8)とステップアウト(ctrl+F8)カーソル行まで実行 (F7) です。
たとえば、このように、ステップ実行している場合、このままでは関数:OpenFile に入ってしまいますが、入りたくない場合、(すでにテストが済んでいるため、ステップ実行する必要が無い場合など)ステップオーバー(shift+F8)を行ってください。

このステップオーバー(shift+F8)を行うと、呼び出している関数内部に入ることなく実行します。(関数内部にブレイクポイントを設定している場合、ブレイクポイントまで一気に実行して、そこで止まります)また、既に関数内部に入ってしまったが、その関数だけを抜け出したい場合は、ステップアウト(ctrl+F8)を行います。
また F7 キーを押すことで、カーソルがある行まで一気に実行し、カーソル行で止まります。(ちょうど、ブレイクポイントを設定した場合と同じ動作です。)

処理経過を戻ることも可能です。
処理を戻したい個所に、カーソルを合わせ、ctrl+F9 を押すことで、処理を差し戻すことも可能です。(関数外部へは戻れません。)

まとめ2

・ステップオーバー(shift+F8):関数内部に入ることなく、ステップ実行ができます。
・ステップアウト(ctrl+F8) :関数を一気に抜け出すことができます。
・カーソル行まで実行(F7) :カーソルがある行まで実行して止まります。
・再び任意の個所からやり直したい:やり直したい個所を選択して、ctrl+F9
百聞は一見にしかずです。ぜひとも、デバッグを実践してください。

関連するFAQ、Tech-Info