リンク
インターシステムズ(日) └日本語ドキュメント インターシステムズ(US) (有)エムブイビイ ダイナシステム(株) Googleグループ(英語) Googleグループ(日本語) George James Software cache'infoアーカイブ 【広告】
|
コマンドラインからのデバッグDebug on commandline.
コマンドラインでのデバッグを行う方法をメモしておきます。 ブレークとは、作成したプログラムの動作状況を確認するために、プログラム実行中に一時停止することをいいます。 Cache'では通常、スタジオでプレークポイントをしてするなどしてスタジオからデバッグを実行しますが、コマンドラインからデバッグを実行することも出来ます。 ブレークポイントを仕掛けるプログラムを編集できる場合は、ブレークを仕掛けたい場所でBreakコマンドを置きます。 if条件などを付けるのも簡単です。プログラムを編集できない場合には、ブレークを仕掛ける場所をZBreakコマンドを使用して、 ZB 場所 といった形式で指定します。 ZB TEST+10:"BL+"
スタジオでのデバッグをコマンドラインで指定するイメージになります。
変数の値が変化した場合にブレークする場合もZBreak *変数名という記述で指定できます。
さらに、
ZB *var:"BL+":"$G(var)>100"
とすると、変数varが100より大の場合にのみブレークすることが出来ます。
ブレーク後の動作ブレークポイントを仕掛けたプログラムを動作させると、ブレーク場所で<BREAK>が発生してプログラムが停止します。 ブレーク発生後の動作は Break コマンドのパラメーターで指定します。主なパラメータとして
次のブレークポイントまで進めるには、Gotoコマンドを実行します。 動作例
TEST()
Public {
//1+2+3+4+5+...
このようなプログラムを想定します。 Break S total=0 For i=1:1:1000 { S total=total+i W i,! } } このプログラムにはすでにBreakコマンドが埋め込まれています。そのためターミナルから実行した場合、Breakの場所で停止します。 USER>D TEST^test
Goto文を実行すると次のブレークポイントが定義されていないため、プログラムが最後まで実行されます。Break ^ <BREAK>TEST+1^test USER 2d1>G 1 2 3 (以下略 今度はBreakで止まった後に"L"を指定してみます。 USER>D TEST^test
Gotoを実行するたびに一行ずつ進んでいきますが、Forの中身は一気に実行されています。Break ^ <BREAK>TEST+1^test USER 2d1>B "L" USER 2d1>G S total=0 ^ <BREAK>TEST+2^test USER 2d1>G For i=1:1:1000 { ^ <BREAK>TEST+3^test USER 2d1>G 1 2 3 (以下略 今度はBreakで止まった後に"L+"を指定してみます。 USER>D TEST^test
Forの中身も1行ずつ実行されています。Break ^ <BREAK>TEST+1^test USER 2d1>B "L+" USER 2d1>G S total=0 ^ <BREAK>TEST+2^test USER 2d1>G S tatal=total+i ^ <BREAK>TEST+4^test USER 3f2>G W i,! ^ <BREAK>TEST+5^test USER 3f2>G 1 S tatal=total+i ^ <BREAK>TEST+4^test さすがに1行ずつ進めると時間がかかるので、ZBreakを使用して変数totalが1000より大きくなった場合に止めてみます。このとき、既存のブレークをB "C"で解除するのを忘れないようにしてください。
引き続き・・・
iが45のとき、totalは1035になりそこでBreakが発生しました。USER 3f2>B "C" USER 3f2>ZB *total:"BL+":"$G(total)>1000" USER 3f2>G 2 3 (中略 43 44 S total=total+i ^ <BREAK>TEST+4^test USER 3f2>W i,!,total 45 1035 進めるとtotalが変更されるたびにBreakが発生します。 Breakを解除してプログラムを最後まで進めます。
引き続き・・・
より詳しく→
USER 3f2>B "L-" USER 3f2>G 45 S total=total+i ^ <BREAK>TEST+4^test USER 3f2>ZB --*total USER 3f2>G 46 47 (以下略 |